2012-04-22 21 views
14

एक तत्व टॉगल का चयन करें और अपने भाई बहन के रूप में पूरा किया जा सकता:एक तत्व और उसके भाई बहन

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

संयोजन उन्हें काम नहीं करता:

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

कैसे दोनों एक ही समय में चुना जा सकता है ? संयोग से

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

उत्तर

6

, जबकि इस सवाल पहले से ही answered by drinchev कर दिया गया है:

+0

वेब की खुशी! कोई गंभीरता नहीं है..! =) एक लंबी कहानी को कम करने के लिए [आईई <9 'पिछले एलीमेंट सिब्लिंग' नहीं करता है] (http://www.quirksmode.org/dom/w3c_core.html#t84)। फिर भी, पुराना, और हमेशा फैशनेबल, 'अगर' दृष्टिकोण है। =) –

+0

मैं आपके समाधान का परीक्षण करते समय एक बेवकूफ गलती कर रहा था। हालांकि, नहीं, 'पिछली एलिमेंट सिब्लिंग' चाल नहीं करेगी, बस एक सरणी का उपयोग करेगा ... '$ ([$ (यह), $ (this.prev())] 'यह करता है! – Gary

+2

$ (यह) .prev()। और स्वयं() टॉगल(); –

30

jQuery 1.8+ के लिए, .addBack() का उपयोग करें:

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

पहले jQuery संस्करणों के लिए, पदावनत .andSelf() कॉल का उपयोग करें (demo देखें) , मैंने सोचा कि मैं इस त्वरित प्रयोग को पेस्ट कर दूंगा जो मैंने अभी किया है, प्रश्न पढ़ने के बाद, जो भी काम करता है। यद्यपि ... यह मुझे हैरान कर दिया जब यह किया:

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

JS Fiddle demo

संयोग से, JS Perf loose comparison of the two selector approaches


संपादित (अब तक मुझे पता है) के अनुकूल अद्यतन एक यानी जोड़ने के लिए, यद्यपि मैं वर्तमान में इसके साथ सभी ब्राउज़रों saddling कर रहा हूँ, बजाय सुविधा का पता लगाने (भी, मैं अंत में एहसास हुआ कि नीले रंग ! = हरा):

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

* डेमो * गलत है। उत्तर 'prev()' का उपयोग कर रहा है, जबकि डेमो 'पैरेंट()' का उपयोग कर रहा है, जो ओपी चाहता था। – Pang

6

पिछला भाई बहन और स्वयं के लिए:

$(this).prev().andSelf().toggle(); 
,210 सभी भाई बहन और स्वयं के लिए

:

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

भी काम करता है:

$(this).prev().add($(this)).toggle() 
संबंधित मुद्दे