2008-10-28 21 views
7

मैं दो jQuery ऑब्जेक्ट्स का उपयोग करके वंश की जांच करना चाहता हूं। उनके पास आईडी नहीं हैं, और केवल jQuery ऑब्जेक्ट्स के रूप में उपलब्ध होने जा रहे हैं (या यदि आप get() कहलाते हैं तो डोम नोड्स)। jQuery के is() केवल भाव के साथ काम करता है, इसलिए इस कोड आदर्श हो सकता है लेकिन काम नहीं करेगा होगा:jQuery ऑब्जेक्ट्स jQuery ऑब्जेक्ट्स का उपयोग कर

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().is(someDiv)) { 
     alert('boo'); 
    } 
} 

बस अगर एक तत्व एक और का एक बच्चा है देखना चाहते हैं और मैं डोम भूमि अगर में वापस कदम से बचना चाहते हैं मुमकिन।

उत्तर

12

आप सूची में कोई तत्व मौजूद है या नहीं, यह जांचने के लिए आप इंडेक्स() विधि का उपयोग कर सकते हैं, तो निम्न कार्य क्या होगा?

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().index(someDiv) >= 0) { 
     alert('boo'); 
    } 
} 

#index reference से।

$('a').click(function() { 
    if ($(this).parents("#div").length) { 
    alert('boo'); 
    } 
}); 
+0

बिल्कुल सही गैरेथ, धन्यवाद! मैं आपको वोट दूंगा, लेकिन मेरा कम 11 प्रतिष्ठा स्कोर मुझे ऐसा करने से रोकता है। – MichaelThompson

1

उन पंक्तियों के साथ, माता-पिता() वैकल्पिक रूप से एक चयनकर्ता ही स्वीकार करता है jQuery.inArray

if ($.inArray(someDiv, $(this).parents())) { 
     alert('boo'); 
} 
+0

। पेरेंट्स() केवल चयनकर्ताओं के सबसे बुनियादी स्वीकार करता है (यानी केवल एक तत्व का वर्णन करने वाले चयनकर्ता काम करेंगे - चयनकर्ताओं को "पी मजबूत" जैसे एन्सेट्री का वर्णन नहीं करना चाहिए)। –

+0

हालांकि वह जो करने की कोशिश कर रहा है उसके लिए यह ठीक काम करता है। –

+0

मैंने अपना उदाहरण थोड़ा सा सरलीकृत किया, इसलिए वास्तविक कोड में मुझे स्ट्रिंग चयनकर्ताओं के बजाय संग्रहीत jQuery संदर्भों का उपयोग करके मूल वस्तु मिल रही है। – MichaelThompson

0

एक तरह से फिल्टर समारोह

$('a').click(function() { 
    $(this).parents().filter(function() { 
     return this == someDiv[0]; 
    }).each(function() { 
     alert('foo'); 
    }) 
} 

उपयोग करने के लिए मुझे लगता है कि आप भी दूर प्राप्त करने में सक्षम हो सकता है हो सकता है:

0

क्या आप केवल एक सीएसएस से उपयोग करने के परिणाम प्राप्त नहीं करेंगे पाठभेद?

$('#div a').click(function() { ... }); 
10

(this).parents().index(someDiv) >= 0 के लिए जांच की जा रही है, के रूप @Gareth पता चलता है, होगा काफ़ी होंगे।

हालांकि, jQuery ancestry plugin का उपयोग तरीका तेजी से/अधिक कुशल है।

+0

धन्यवाद! पूर्वजों प्लगइन और डीओएम विधियों काफी तेजी से हैं। – MichaelThompson

+1

तब हमें वोट देने के बारे में क्या? ;-) –

0

इस प्रयास करें:

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($.inArray($(this).parents().get(), someDiv.get(0)) { 
     alert('boo'); 
    } 
} 
0
var $element = $('a'); 
while ($element && !$element.is('someDiv')) { 
    var $element = $element.parent(); 
}; 
संबंधित मुद्दे