2012-11-30 44 views
1

這可能很容易,但我無法使其工作。我正在使用.each()遍歷列表。我想知道是否可以使用索引刪除一個類。使用索引刪除班級

例如。如果列表中有10個項目,並且我想要從第5個元素中刪除該類,例如單擊第8個元素時。

$(function() { 
var items = $('#v-nav>ul>li').each(function (index) { 
    $(this).click(function() { 
     if (index = 8) 
{ 
$(#5).removeClass('class'); 
} 
    }); 
}); 

任何有任何想法的人?謝謝

+0

您不需要頂層迭代所有'li'元素,而是直接在目標'li'上添加事件處理函數。 –

回答

5

變化

$(#5).removeClass('class'); 

$('#v-nav>ul>li:eq(4)').removeClass('class'); 

其更好地分配你的選擇返回元素,再次做同樣的處理,從而獲得所需的元素。

$(function() { 
    var items = $('#v-nav>ul>li') 

     $('#v-nav>ul>li').click(function() { 
      if ($(this).index() = 8) 
      { 
      $(items).eq(4).removeClass('class'); 
      } 
     }); 
}); 
+0

我在哪裏迭代?在OP中「我想從第5個元素中刪除類,例如,當我單擊第8個元素時」 – Adil

+0

糟糕!不,你沒有迭代,而是'OP'。 –

1

沒有必要與each()迭代,因爲每個元素已經有一個指標,並使用eq()會讓你選擇基於他們在DOM有索引的元素。該解決方案是依賴於要素是兄弟姐妹()等

$(function() { 
    var elems = $('#v-nav>ul>li'); 

    elems.on('click', function() { 
     if ($(this).index()==8) elems.eq(4).removeClass('class'); 
    }); 
}); 

你也可以只點擊綁定到一個元素:

$(function() { 
    $('#v-nav>ul>li:eq(7)').on('click', function() { 
     $(this).siblings().filter(':eq(4)').removeClass('class'); 
    }); 
}); 

否則我只想做:

$(function() { 
    var elems = $('#v-nav>ul>li'); 
    $.each(elems, function(idx, elm) { 
     if (idx==8) elems.eq(4).removeClass('class'); 
    }); 
}); 

作爲僅包含一個數字(或以數字開頭)的旁註ID是無效的。

+0

看起來像eq(5)應該是eq(4) –

+0

@ Sushanth--你是對的,因爲eq()是零索引! – adeneo

+0

+1另一種方法:) –

0

其實你並不需要遍歷所有li元素,而是你可以像這樣

$(function(){ 
    $('#v-nav>ul>li').eq(7).on('click', function(){ // eq(7) is 8th li 
    $(this).closest('ul').find('li').eq(4).removeClass('cls'); //eq(4) is 5th li 
    }); 
}); 

DEMO