2012-04-22 63 views
14

切换一个元素,它的兄弟姐妹可以如:选择一个元素和它的兄弟姐妹

$(this).toggle(); 
$(this).prev().toggle(); 

,结合它们不起作用:

$(this,$(this).prev()).toggle(); 

如何既可以在同一时间选择?

回答

6

顺便说一句,虽然这个问题已经answered by drinchev ,我想我会在阅读这个问题之后,粘贴这个我刚才做的快速实验。虽然...它让我惊讶:

$('#recipient').click(
    function(){ 
     var pair = [this, this.previousElementSibling]; 
     $(pair).toggleClass('red green'); 
    });​ 

​​3210。

顺便提一下,JS Perf loose comparison of the two selector approaches


编辑添加一个IE-(到目前为止我所知)友好更新,虽然我目前正在备马所有浏览器都用它,而不是功能检测(也,我终于明白了蓝!=绿色):

function pESibling(n){ 
    var nPS = n.previousSibling; 
    if (!n || nPS === null){ 
     return false; 
    } 
    else if (nPS.nodeType == 1){ 
     return nPS; 
    } 
    else { 
     return pESibling(nPS); 
    } 
} 

var that = document.getElementById('recipient'), 
    pair = [that, pESibling(that)]; 
$(pair).toggleClass('red green'); 
console.log(pair); 
​ 

JS Fiddle demo

+0

网络的快乐!不,认真..! =)长话短说[IE <9不'做'previousElementSibling'](http://www.quirksmode.org/dom/w3c_core.html#t84)。尽管如此,还是有一种古老而时尚的“if”方法。 =) – 2012-04-22 16:25:29

+0

测试解决方案时,我犯了一个愚蠢的错误。虽然,不,'previousElementSibling'不会做到这一点,只需使用一个数组将会...'$([$(this),$(this.prev())])''做到了! – Gary 2012-04-22 16:26:55

+2

有一个简单的方法$(this).prev()。andSelf()。toggle(); – 2013-04-11 21:32:41

30

的jQuery 1.8+,使用.addBack()

$(this).prev().addBack().toggle(); 

对于早期的jQuery版本,使用已弃用.andSelf()调用(请参阅demo):

$(this).prev().andSelf().toggle(); 
+0

的*演示*是错误的。答案是在演示使用'parent()'时使用'prev()',这不是OP想要的。 – Pang 2016-12-12 04:16:00

6

为上一个兄弟姐妹和自我:

$(this).prev().andSelf().toggle(); 

所有的兄弟姐妹和自我:

$(this).parent().children().toggle(); 
1

也可以工作:

$(this).prev().add($(this)).toggle()