監(jiān)聽DIV等標(biāo)記的class屬性改變,實現(xiàn)onshow,onhide

貌似h5標(biāo)記有click等事件的監(jiān)聽,沒有show,hide等事件的監(jiān)聽。用了一個tab樣式庫,想實現(xiàn)切換tab時刷新頁面數(shù)據(jù),這個庫也沒說明招接口也不好找??吹剿窃赿iv的class屬性上面addClass("active show"),removeClass("active show"),來實現(xiàn)切換時的隱藏和顯示的。于是就想有沒有監(jiān)聽class改變的方法,百度到 MutationObserver
用示例代碼測試了一下,果真可以。

<script>
    $(document).ready(function(){
        var targetNode = document.getElementById('article-original-review').parentNode;
        var config = { attributes: true };
        var callback = function(mutationsList) {
          for(var mutation of mutationsList) {
            if (mutation.type == 'attributes') {
                  if($(targetNode).hasClass("active")){
                    setTimeout(function(){ getlist()},100);  
                  }
              }
          }
        };
        var observer = new MutationObserver(callback);
        observer.observe(targetNode, config);
    });

    function getlist(){
      var newidolurl = "/api/private/";
      $.ajax({
          type: "POST",      //data 傳送數(shù)據(jù)類型。post 傳遞
          dataType: 'json',  // 返回數(shù)據(jù)的數(shù)據(jù)類型json
          contentType: "application/json; charset=utf-8",
          url: newidolurl,  // yii 控制器/方法
          cache: false,      
          data: JSON.stringify({action:'original-review-list'}),  //傳送的數(shù)據(jù)
          error:function(res){
              alert("數(shù)據(jù)傳輸錯誤");
          },success: function (data) {
            if(data.status == 0){

            }else{
              alert(data.msg);
            }
          }
      })        
    }
</script>

測試tab點擊切換按鈕時,果真觸發(fā)了ajax請求。但是有個問題,為啥連續(xù)觸發(fā)兩次啊。后來想一想難道時addClass("active show") 兩個屬性就觸發(fā)兩次,搞不懂啊。找不到原因也要解決阿。于是引入setTimeout來過濾重復(fù)請求。代碼如下:

<script>
    $(document).ready(function(){
        var targetNode = document.getElementById('article-original-review').parentNode;
        var config = { attributes: true };
        var idTimeout = 0;
        var callback = function(mutationsList) {
          for(var mutation of mutationsList) {
            if (mutation.type == 'attributes') {
                  clearTimeout(idTimeout)
                  if($(targetNode).hasClass("active")){
                    idTimeout = setTimeout(function(){ getlist()},100);  
                  }
              }
          }
        };
        var observer = new MutationObserver(callback);
        observer.observe(targetNode, config);
    });

    function getlist(){
      var newidolurl = "/api/private/";
      $.ajax({
          type: "POST",      //data 傳送數(shù)據(jù)類型。post 傳遞
          dataType: 'json',  // 返回數(shù)據(jù)的數(shù)據(jù)類型json
          contentType: "application/json; charset=utf-8",
          url: newidolurl,  // yii 控制器/方法
          cache: false,      
          data: JSON.stringify({action:'original-review-list'}),  //傳送的數(shù)據(jù)
          error:function(res){
              alert("數(shù)據(jù)傳輸錯誤");
          },success: function (data) {
            if(data.status == 0){

            }else{
              alert(data.msg);
            }
          }
      })        
    }
</script>

ok,搞定,僅作記錄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 源站:http://fengyuanchen.github.io/viewer/ 應(yīng)用: html: 源碼上是正常...
    羊繪霖閱讀 5,688評論 0 2
  • jQuery模塊 選擇器、DOM操作、事件、AJAX與動畫 匿名函數(shù)自執(zhí)行 作用:解決命名空間與變量污染的問題 總...
    青青玉立閱讀 992評論 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,797評論 1 45
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計者無需花費(fèi)時間糾纏JS復(fù)雜的高級特性。 1....
    LaBaby_閱讀 1,495評論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計者無需花費(fèi)時間糾纏JS復(fù)雜的高級特性。 1....
    LaBaby_閱讀 1,262評論 0 1

友情鏈接更多精彩內(nèi)容