排他操做

1. 排他操做

1.1 排他思想

若是有同一組元素,咱們想要某一個元素實現某種樣式, 須要用到循環的排他思想算法:算法

  1. 全部元素所有清除樣式(幹掉其餘人)數組

  2. 給當前元素設置樣式 (留下我本身)this

  3. 注意順序不能顛倒,首先幹掉其餘人,再設置本身url

<button>按鈕1</button>
    <button>按鈕2</button>
    <button>按鈕3</button>
    <button>按鈕4</button>
    <button>按鈕5</button>
    <script>
        // 1. 獲取全部按鈕元素
        var btns = document.getElementsByTagName('button');
        // btns獲得的是僞數組  裏面的每個元素 btns[i]
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function() {
                // (1) 咱們先把全部的按鈕背景顏色去掉  幹掉全部人
                for (var i = 0; i < btns.length; i++) {
                    btns[i].style.backgroundColor = '';
                }
                // (2) 而後才讓當前的元素背景顏色爲purple 留下我本身
                this.style.backgroundColor = 'purple';

            }
        }
    </script>

 

1.2 案例:百度換膚

 

案例分析spa

① 這個案例練習的是給一組元素註冊事件 code

② 給4個小圖片利用循環註冊點擊事件 blog

③ 當咱們點擊了這個圖片,讓咱們頁面背景改成當前的圖片 seo

④ 核心算法: 把當前圖片的src 路徑取過來,給 body 作爲背景便可事件

 

<style>
      * {
        padding: 0;
        margin: 0;
      }
      body {
        background: url(images/1.jpg) no-repeat center;
      }
      .baidu {
        width: 410px;
        height: 100px;
        margin: 150px auto;
        background-color: #fff;
      }
      .baidu li {
        float: left;
        list-style: none;
        width: 100px;
        height: 98px;
        margin: 0 1px;
      }
      .baidu li img {
        width: 100%;
        height: 100%;
      }
    </style>
 <body>
    <ul class="baidu">
      <li><img src="images/1.jpg" alt="" /></li>
      <li><img src="images/2.jpg" alt="" /></li>
      <li><img src="images/3.jpg" alt="" /></li>
      <li><img src="images/4.jpg" alt="" /></li>
    </ul>

    <script>
      // 1. 獲取元素
      var imgs = document.querySelector(".baidu").querySelectorAll("img");
      // 2.註冊循環事件
      for (var i = 0; i < imgs.length; i++) {
        imgs[i].onclick = function () {
          document.body.style.backgroundImage = "url(" + this.src + ")";
        };
      }
    </script>
  </body>

1.3 案例:表格隔行變色

 

 案例分析圖片

① 用到新的鼠標事件 鼠標通過 onmouseover   鼠標離開 onmouseout

② 核心思路:鼠標通過 tr 行,當前的行變背景顏色, 鼠標離開去掉當前的背景顏色

③ 注意: 第一行(thead裏面的行)不須要變換顏色,所以咱們獲取的是 tbody 裏面的行

 <script>
      // 1. 獲取元素
      var tb = document.querySelector("tbody").querySelectorAll("tr");
      // 2.利用循環綁定註冊事件
      for (var i = 0; i < tb.length; i++) {
        // 3.鼠標通過
        tb[i].onmouseover = function () {
          this.className = "bg";
        };
        // 4. 鼠標離開
        tb[i].onmouseout = function () {
          this.className = "";
        };
      }
    </script>

1.4 案例::表單全選取消全選案例

業務需求:
1. 點擊上面全選複選框,下面全部的複選框都選中(全選)
2. 再次點擊全選複選框,下面全部的複選框都不中選(取消全選)
3. 若是下面複選框所有選中,上面全選按鈕就自動選中
4. 若是下面複選框有一個沒有選中,上面全選按鈕就不選中
5. 全部複選框一開始默認都沒選中狀態

 

 案例分析
① 全選和取消全選作法:  讓下面全部複選框的checked屬性(選中狀態) 跟隨 全選按鈕便可

② 下面複選框須要所有選中, 上面全選才能選中作法: 給下面全部複選框綁定點擊事件,每次點擊,都 要循環查看下面全部的複選框是否有沒選中的,若是有一個沒選中的, 上面全選就不選中。

③ 能夠設置一個變量,來控制全選是否選中

<script>
      // 獲取元素
      var j_cbAll = document.getElementById("j_cbAll");
      var j_tbs = document.getElementById("j_tb").getElementsByTagName("input");
      j_cbAll.onclick = function () {
        for (var i = 0; i < j_tbs.length; i++) {
          j_tbs[i].checked = this.checked;
        }
      };
      for (var i = 0; i < j_tbs.length; i++) {
        j_tbs[i].onclick = function () {
          var flag = true;
          for (var i = 0; i < j_tbs.length; i++) {
            if (!j_tbs[i].checked) {
              flag = false;
            }
          }
          j_cbAll.checked = flag;
        };
      }
    </script>
相關文章
相關標籤/搜索