2012-02-20 25 views
5

में भाई बहन हैं: भले हीसुनिश्चित दो आइटम निम्न HTML संरचना को देखते हुए जे एस/jQuery

($('#a').parent() == $('#b').parent()); //=> false 

:

<div class="wrap"> 
    <div id="a"></div> 
    <div id="b"></div> 
</div> 
निम्नलिखित

गलत है

$('#a').parent().children('#b').length; //=> 1 

किसी को समझा सकते हैं क्यूं कर? धन्यवाद!

उत्तर

6

मैं बिल्कुल 100% नहीं हूं कि यह क्यों काम नहीं करता है, लेकिन मेरा मानना ​​है कि यह इसलिए है क्योंकि तत्व jQuery ऑब्जेक्ट्स में लिपटे हैं जो प्रति तत्व मूल रूप से अलग हैं। इसी कारण की वजह से

($('#a').parent()[0] == $('#b').parent()[0]); // true 

Example fiddle

+0

बहुत बहुत धन्यवाद :) – abrad45

3

कि $('#a) == $('#a')false

है हर बार जब jQuery एक सेट builts:

समाधान के लिए, आप देशी डोम वस्तु तुलना कर सकते हैं, इस तरह तत्वों के, यह नया ऑब्जेक्ट देता है (भले ही jQuery ऑब्जेक्ट एक ही तत्व को दूसरे के रूप में लपेटता हो)। जावास्क्रिप्ट में, केवल एक ऑब्जेक्ट दूसरे के बराबर है, यह है कि यह बिल्कुल वही वस्तु है;

var a = { 
    foo: 1 
}; 
var b = { 
    foo: 1 
}; 

(a == b) // false; 

इसे ठीक करने के लिए आपको या तो तुलना कर सकते हैं डोम सीधे वस्तुओं (या तो .get(i) का उपयोग कर या एक सरणी की तरह jQuery वस्तु का उपयोग करके ([i])), या आप is() विधि का उपयोग मिलता है,

if ($('.foo').get(i) == $('.bar').get(i)); 
if ($('.foo')[0] == $('.bar')[0]); 
if ($('.foo').is($('.bar')); // or even... 
if ($('.foo').is('.bar')); 
+2

'$ ('। Foo')। ('Bar') 'पर्याप्त होना चाहिए। स्पष्टीकरण के लिए –

+0

धन्यवाद! – abrad45