سؤال
في تجربتي جافا سكريبت، وجدت أن مهمة شائعة جدا "البحث في أقرب سلف عنصر مع بعض شرط (اسم العلامة، والطبقة، ...)". يمكن للوالدين () طريقة مسج قيام بهذه المهمة؟ ترتيب العناصر عاد من الآباء والأمهات () يمكن التنبؤ بها؟ هو أعلى إلى أسفل أو من أسفل إلى أعلى؟ لحظة استخدام هذه الوظيفة فائدة:
function ancestor(elem, selector) {
var $elem = $( elem ).parent();
while( $elem.size() > 0 ) {
if( $elem.is( selector ) )
return $elem;
else
$elem = $elem.parent();
}
return null;
}
ويمكن أن تقولوا لي ما إذا كان هناك وسيلة ذكية للقيام بهذه المهمة؟
المحلول
تعديل : لومنذ مسج 1.3، وقد تم بناء هذا في مثل closest()
أ > وظيفة. على سبيل المثال: $('#foo').closest('.bar');
وموافق - الوالدين () تقطع حتى شجرة
<div id="a">
<div id="b">
<p id="c">
<a id="d"></a>
</p>
</div>
</div>
و$('#d').parents("div:first");
سوف تختار شعبة ب.
نصائح أخرى
إضافة إلى @ nickf الصورة الجواب: م>
ومسج 1.3 simplifyed هذه المهمة مع closest
.
وبالنظر إلى DOM:
<div id="a">
<div id="b">
<p id="c">
<a id="d"></a>
</p>
</div>
</div>
ويمكنك القيام به:
$('#d').closest("div"); // returns [ div#b ]
<اقتباس فقرة>
[ الأقرب بإرجاع] مجموعة من العناصر التي تحتوي على أقرب الأم العنصر الذي يطابق محدد محدد، العنصر بدء المدرجة.
اقتباس فقرة> ويجب عليك استخدام closest
، لأن parents
لا تعطيك النتيجة التي تتوقعها إذا كنت تعمل مع عناصر متعددة. على سبيل المثال، دعونا نقول لديك هذا:
<div id="0">
<div id="1">test with <b>nested</b> divs.</div>
<div id="2">another div.</div>
<div id="3">yet <b>another</b> div.</div>
</div>
ووتريد إضافة فئة إلى عناصر div التي تنطوي على عنصر <b>
كما الطفل على الفور (أي 1 و 3). إذا كنت تستخدم $('b').parents('div')
، يمكنك الحصول على عناصر div 0، 1 و 3. إذا كنت تستخدم $('b').parents('div:first')
، يمكنك فقط الحصول على شعبة 1. للحصول على 1 و 3، ولكن ليست 0، لديك لاستخدام $('b').closest(elem)
.
والأقرب () يبدأ في العنصر الحالي، إذا كان الوالد كنت تبحث عن ديه نفس العلامة كما الحالية (على سبيل المثال. وكلاهما عناصر div)، واستخدام الأم (). الأقرب ()