2014-03-12 118 views
1
$('.myclass').parent().prev().prev(); 
$('.myclass').parent().prev(); 
$('.myclass'); 
$('.myclass').parent().next(); 
$('.myclass').parent().next().next(); 

如何通過jQuery在一行中選擇所有這些元素?通過樹遍歷選擇元素的多選擇器

我認爲這個解決方案,但希望有更好的東西:

$('.myclass').parent().prev().prev().addClass('select_me'); 
$('.myclass').parent().prev().addClass('select_me'); 
$('.myclass').addClass('select_me'); 
$('.myclass').parent().next().addClass('select_me'); 
$('.myclass').parent().next().next().addClass('select_me'); 

$('.select_me').fadeOut(); // I select all the previous elements in only 1 line. 
+2

請分享HTML –

回答

3

可以使用filter()index()

idx = $('.myclass').parent().index(); 
$('.myclass').parent().siblings().addBack().filter(function(){  
    return $(this).index() > idx -3 && $(this).index() < idx + 3; 
}).addClass('select_me'); 

Live Demo

$('.myclass').each(function(){  
    currentObject = $(this); 
    parent = $(this).parent(); 
    $(this).parent().siblings().filter(function(){ 
     return $(this).index() > parent.index() -3 && $(this).index() < parent.index() + 3; 
    }).add(currentObject).addClass('select_me'); 
}); 
+0

大先生:)你擊敗了阿倫普也:) –

+0

這可能只是錯了,因爲我的解決方案,給出的問題。 +1 – sabof

+0

爲什麼你認爲它錯了 – Adil

1

喜歡這個?

$.merge($('.myclass'), $('.myclass').parent().siblings()).fadeOut();