2013-04-30 276 views
3

我試圖做一個簡單的removeClass和addClass來改變Img的樣式。對象不支持屬性或方法'removeClass'

<div id="Pic_Viewer"> 
     <div id="Main_Pic_Viewer"> 
       <div class="Not_Selected" > 
        <img src='#' alt="PicURL_1" /> 
       </div> 
       <div class="Not_Selected" > 
        <img src='#' alt="PicURL_2" /> 
       </div> 
     </div> 
     <div id="Small_Pic_Viewer"> 
      <ul> 
       <li> 
        <img class="Small_Pic" src'#' alt="PicURL_1" /> 
       </li> 
       <li> 
        <img class="Small_Pic" src='#' alt="PicURL_2" /> 
       </li> 
      </ul> 
     </div> 
    </div> 

我已經嘗試使用#Main_Pic_Viewer img內部div和沒有這樣做。

JS:

$('#Small_Pic_Viewer ul li').click(
     function() { 
      var ThisLI = this.firstElementChild.alt; 
      var BigImgDiv = $('#Main_Pic_Viewer div'); 
      var CurDiv; 

      for (var i = 0, l = BigImgDiv.length; i < l; i++) { 
       CurDiv = BigImgDiv[i]; 
       if (BigImgDiv[i].children[0].alt === ThisLI) { 
        CurDiv.removeClass('Not_Selected').addClass('Selected'); 
       } else { 
        CurDiv.removeClass('Selected'); 
       }; 
      }; 
     } 
    ); 

不知道爲什麼即時得到此錯誤消息,因爲removeClass()以其他方法是工作的罰款。

+2

,因爲它不是一個jQuery OB ject,乾脆'CurDiv = $(BigImgDiv [i]);' – Ohgodwhy 2013-04-30 06:26:11

+0

謝謝大家,回答完全迴避了我。 – DirtyRedz 2013-04-30 06:42:57

回答

6

在jQuery對象中使用數字索引時,您將獲得沒有jQuery包裝器的原始DOM元素。

就在一個jQuery功能再次把這個包,你會被罰款:

// ... 

CurDiv = $(BigImgDiv[i]); 

// ... 

如在評論中所建議的@Andreas另一種解決方案是使用eq()方法,它可能是更好的方法:

// ... 

CurDiv = BigImgDiv.eq(i); 

// ... 
+3

爲什麼打開dom元素以立即將其包裝在jQuery對象中?使用['.eq()'](http://api.jquery.com/eq/)代替 – Andreas 2013-04-30 06:29:14

+0

@Andreas已添加。謝謝。 – Sirko 2013-04-30 06:31:27

0

試試這個:http://jsfiddle.net/Yx5c8/1/

$('#Small_Pic_Viewer ul li').click(function() { 
    var ThisLI = this.firstElementChild.alt; 
    $('#Main_Pic_Viewer div').each(function() { 
     if (this.children[0].alt === ThisLI) { 
      $(this).removeClass('Not_Selected').addClass('Selected'); 
     } else { 
      $(this).removeClass('Selected'); 
     } 
    }); 
}); 
相關問題