2010-03-13 28 views
97

तो मैं यह देखने का प्रयास कर रहा हूं कि दो jQuery ऑब्जेक्ट्स की तुलना कैसे करें, यह देखने के लिए कि मूल तत्व किसी पृष्ठ का मुख्य भाग है या नहीं।आप jQuery ऑब्जेक्ट्स की तुलना कैसे करेंगे?

if ($(this).parent() === $('body')) ... 

मैं जानता हूँ कि यह गलत है, लेकिन अगर किसी को भी समझता है कि मैं क्या पर हो रही है, वे मुझे ऐसा करने का सही तरीका की ओर इंगित कर सकते हैं:

यहाँ

मैं क्या है क्या है?

+2

'वर $ माता पिता = $ (this) .parent(), $ शरीर = $ ('शरीर');' ' वर एक ही = $ parent.is ($ शरीर);' http : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (यह)। माता-पिता()। ($ ('body') है); // या $ ('body') http://stackoverflow.com/a/6986013/112100 – Omu

उत्तर

156

आप कच्चे डोम तत्वों तुलना करने के लिए, उदा .: जरूरत

if ($(this).parent().get(0) === $('body').get(0)) 

या

if ($(this).parent()[0] === $('body')[0]) 
+1

के अलावा किसी अन्य चीज़ की जांच करें, यदि jQuery ऑब्जेक्ट एक एकल DOM तत्व से मेल खाता है तो यह केवल समानता सुनिश्चित करेगा। यदि कई मैच थे तो आपको प्रत्येक की तुलना करने के लिए किसी प्रकार की लूप की आवश्यकता होगी। –

+1

@ जिमी, हाँ, लेकिन यह ओपी आवश्यकताओं के लिए पर्याप्त है, वह केवल यह जानना चाहता है कि ... "यदि मूल तत्व शरीर है ..." – CMS

+2

यह छोटा कर सकता है: यदि (this.parentNode === दस्तावेज़। कोई); – ehynds

59

क्यों नहीं:

if ($(this).parent().is("body")) { 
    ... 
} 

?

+0

या 'if ($ (यह)। पैरेंट()। ($ ("बॉडी") है)) – dieend

17

लूपिंग की आवश्यकता नहीं है, एकल पहले नोड का परीक्षण करने की आवश्यकता नहीं है। यह सुनिश्चित करने के अलावा कि वे समान लंबाई हैं और समान नोड्स साझा करते हैं, इसके अलावा बहुत कुछ भी आवश्यक नहीं है। यहां एक छोटा कोड स्निपेट है। आप इसे अपने स्वयं के उपयोग के लिए एक jquery प्लगइन में भी परिवर्तित करना चाहते हैं।

jQuery(function($) { 
    // Two separate jQuery references 
    var divs = $("div"); 
    var divs2 = $("div"); 

    // They are equal 
    if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {   

    // They are not 
    } else {} 
}); 
+0

क्या यह नहीं कहेंगे कि निम्नलिखित divs बराबर हैं? '

abc
' '
def
' –

+0

नहीं, फ़िल्टर डोम तत्वों को पास नहीं करेगा जो बराबर नहीं हैं। – tbranyen

2

मैंने इन उत्तरों पर ठोकर खाई और आश्चर्य किया कि कौन सा बेहतर था। यह सब आपकी जरूरतों पर निर्भर करता है लेकिन टाइप करने, पढ़ने और निष्पादित करने का सबसे आसान तरीका सबसे अच्छा है। निर्णय लेने के लिए मैंने बनाया गया पेर्फ टेस्टकेस यहां दिया गया है।

http://jsperf.com/jquery-objects-comparison

+0

रॉ डोम एलिमेंट्स 2 मेरे लिए सबसे तेज़ रिपोर्टिंग: हर दूसरे रिपोर्ट किए गए ब्राउज़र के लिए भी ऐसा ही दिखता है। –

+0

बिल्कुल, यह पहले जैसा ही है लेकिन जावास्क्रिप्ट के मूल सरणी पार्सिंग का उपयोग करता है। – Salketer

संबंधित मुद्दे