Toggling an element and its siblings can be accomplished as:
$(this).toggle();
$(this).prev().toggle();
Combining them doesn't work:
$(this,$(this).prev()).toggle();
How can both be selected at the same time?
Toggling an element and its siblings can be accomplished as:
$(this).toggle();
$(this).prev().toggle();
Combining them doesn't work:
$(this,$(this).prev()).toggle();
How can both be selected at the same time?
Incidentally, while this question has already been answered by drinchev, I thought I'd paste this quick experiment I just did, after reading the question, which also works. Albeit...it surprised me when it did:
$('#recipient').click(
function(){
var pair = [this, this.previousElementSibling];
$(pair).toggleClass('red green');
});
Incidentally, a JS Perf loose comparison of the two selector approaches.
Edited to add an IE-(so far as I know)-friendly update, albeit I'm currently saddling all browsers with it, rather than feature-detecting (also, I finally realised that blue != green):
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);
previousElementSibling
won't do the trick, simply using an array will... $([$(this),$(this.prev())])
does it! –
Contracture For jQuery 1.8+, use .addBack()
:
$(this).prev().addBack().toggle();
For earlier jQuery versions, use the deprecated .andSelf()
call (see demo):
$(this).prev().andSelf().toggle();
prev()
while the demo is using parent()
, which is not what the OP wanted. –
Angell for prev siblings and self:
$(this).prev().andSelf().toggle();
for all siblings and self:
$(this).parent().children().toggle();
Incidentally, while this question has already been answered by drinchev, I thought I'd paste this quick experiment I just did, after reading the question, which also works. Albeit...it surprised me when it did:
$('#recipient').click(
function(){
var pair = [this, this.previousElementSibling];
$(pair).toggleClass('red green');
});
Incidentally, a JS Perf loose comparison of the two selector approaches.
Edited to add an IE-(so far as I know)-friendly update, albeit I'm currently saddling all browsers with it, rather than feature-detecting (also, I finally realised that blue != green):
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);
previousElementSibling
. Still, there's the old, and always fashionable, if
approach. =) –
Membrane previousElementSibling
won't do the trick, simply using an array will... $([$(this),$(this.prev())])
does it! –
Contracture © 2022 - 2024 — McMap. All rights reserved.
previousElementSibling
. Still, there's the old, and always fashionable,if
approach. =) – Membrane