जब मैं प्राप्त करना चाहता हूं, उदाहरण के लिए, मुझे जिस तत्व को लिखना होगा उसके तीसरे स्तर के माता-पिता $('#element').parent().parent().parent()
क्या इसके लिए एक अधिक इष्टतम तरीका है?
जब मैं प्राप्त करना चाहता हूं, उदाहरण के लिए, मुझे जिस तत्व को लिखना होगा उसके तीसरे स्तर के माता-पिता $('#element').parent().parent().parent()
क्या इसके लिए एक अधिक इष्टतम तरीका है?
जवाबों:
चूँकि माता-पिता () पूर्वजों के तत्वों को बाहरी लोगों के निकटतम से लौटाते हैं, इसलिए आप इसे eq में बदल सकते हैं () :
$('#element').parents().eq(0); // "Father".
$('#element').parents().eq(2); // "Great-grandfather".
$('.element').first().parents().eq(num);
[2]
अंतर्निहित DOM तत्व eq(2)
वापस आएगा , उपयोग करने से jQuery ऑब्जेक्ट वापस आ जाएगा।
आपकी आवश्यकताओं पर निर्भर करता है, यदि आप जानते हैं कि आपके लिए आपके माता-पिता क्या देख रहे हैं।
उदा: http://jsfiddle.net/HenryGarle/Kyp5g/2/
<div id="One">
<div id="Two">
<div id="Three">
<div id="Four">
</div>
</div>
</div>
</div>
var top = $("#Four").parents("#One");
alert($(top).html());
सूचकांक का उपयोग करके उदाहरण:
//First parent - 2 levels up from #Four
// I.e Selects div#One
var topTwo = $("#Four").parents().eq(2);
alert($(topTwo ).html());
आप लक्ष्य माता-पिता को एक आईडी या वर्ग (जैसे myParent) दे सकते हैं और संदर्भ साथ है $('#element').parents(".myParent")
एक तेज तरीका सीधे जावास्क्रिप्ट का उपयोग करना है, जैसे।
var parent = $(innerdiv.get(0).parentNode.parentNode.parentNode);
यह jQuery .parent()
कॉल का पीछा करने की तुलना में मेरे ब्राउज़र पर काफी तेजी से चलता है ।
उपयोग करने पर कोई उत्तर नहीं मिला closest()
और मुझे लगता है कि यह सबसे सरल उत्तर है जब आपको नहीं पता कि आवश्यक तत्व कितने स्तर तक है, इसलिए उत्तर पोस्ट करना:
आप closest()
पहले तत्व से मेल खाने के लिए चयनकर्ताओं के साथ संयुक्त फ़ंक्शन का उपयोग कर सकते हैं जब तत्व से ऊपर की ओर जाता है:
('#element').closest('div') // returns the innermost 'div' in its parents
('#element').closest('.container') // returns innermost element with 'container' class among parents
('#element').closest('#foo') // returns the closest parent with id 'foo'
यह आसान है। महज प्रयोग करें
$(selector).parents().eq(0);
जहां 0 माता-पिता का स्तर है (0 माता-पिता है, 1 माता-पिता का माता-पिता है)
बस :eq()
इस तरह चयनकर्ता जोड़ें :
$("#element").parents(":eq(2)")
आप सिर्फ इंडेक्स को निर्दिष्ट करते हैं जो अभिभावक: तत्काल माता-पिता के लिए, 1 ग्रैंड-पैरेंट के लिए, ...
यदि आप इस कार्यक्षमता का पुन: उपयोग करने की योजना बनाते हैं, तो इष्टतम समाधान एक jQuery प्लगइन बनाना है:
(function($){
$.fn.nthParent = function(n){
var $p = $(this);
while ( n-- >= 0 )
{
$p = $p.parent();
}
return $p;
};
}(jQuery));
बेशक, आप इसे वैकल्पिक चयनकर्ता और ऐसी अन्य चीजों के लिए अनुमति देना चाहते हैं।
एक नोट: यह 0
माता-पिता के लिए एक आधारित सूचकांक का उपयोग करता है , इसलिए nthParent(0)
कॉलिंग के समान है parent()
। यदि आपके पास 1
अनुक्रमणिका आधारित है, तो उपयोग करेंn-- > 0
var p = 1 + n; while (p--) { $p = $p.parent(); }
और यदि आप 1 पर आधारित बदलना चाहते हैं, तो जावास्क्रिप्ट "फाल्सी" के रूप में उपयोग कर सकते हैं: while (n--) { $p = $p.parent();}
एक सशर्त चेक की बचत
nthParent(-2)
? आपका उदाहरण टूट गया है।
(function($) { $.fn.nthParent = function(n) { return $(this).parents().eq(n); }; }(jQuery));
parents
जिसमें एक से अधिक तत्वों के साथ चयन के लिए गलत होगा।
var p = n >? (1 + n):1;
करने के बजाय "कुछ नहीं" के बजाय उस मामले में पहले माता-पिता को लौटाएगा - या जहां यह मेरे उदाहरण में लूप को तोड़ता है। एसओ, यह शायद होना चाहिए: (function($) { $.fn.nthParent = function(n) { var $p = $(this); if (!(n > -0)) { return $() }; var p = 1 + n; while (p--) { $p = $p.parent(); } return $p; }; }(jQuery));
यदि आप कुछ भी वापस नहीं करना चाहते हैं।
यदि आपके पास एक सामान्य अभिभावक div है तो आप माता-पिता ( लिंक ) का उपयोग कर सकते हैं
उदाहरण के लिए: $('#element').parentsUntil('.commonClass')
लाभ यह है कि आपको यह याद रखने की ज़रूरत नहीं है कि इस तत्व और आम माता-पिता (कॉमनक्लास द्वारा परिभाषित) के बीच कितनी पीढ़ी है।
आप भी उपयोग कर सकते हैं :
$(this).ancestors().eq(n)
ex: $(this).ancestors().eq(2)
-> जनक के माता पिता this
।
आप कुछ इस तरह का उपयोग कर सकते हैं:
(function($) {
$.fn.parentNth = function(n) {
var el = $(this);
for(var i = 0; i < n; i++)
el = el.parent();
return el;
};
})(jQuery);
alert($("#foo").parentNth(2).attr("id"));
eq का उपयोग करते हुए गतिशील DOM को हथियाने के लिए प्रकट होता है .parent () का उपयोग करते हुए। मूल () उस DOM को हथियाने के लिए प्रकट होता है जो शुरू में लोड किया गया था (यदि वह भी संभव है)।
मैं उन दोनों को एक ऐसे तत्व पर उपयोग करता हूं जिसमें कक्षाएं हैं जिन्होंने इसे ऑनमूवर पर लागू किया है। eq .parent ()। पैरेंट () doesn't को क्लासेस दिखाता है।