سؤال

في تجربتي جافا سكريبت، وجدت أن مهمة شائعة جدا "البحث في أقرب سلف عنصر مع بعض شرط (اسم العلامة، والطبقة، ...)". يمكن للوالدين () طريقة مسج قيام بهذه المهمة؟ ترتيب العناصر عاد من الآباء والأمهات () يمكن التنبؤ بها؟ هو أعلى إلى أسفل أو من أسفل إلى أعلى؟ لحظة استخدام هذه الوظيفة فائدة:

function ancestor(elem, selector) {
  var $elem = $( elem ).parent();
  while( $elem.size() > 0 ) {
    if( $elem.is( selector ) ) 
    return $elem;
    else
       $elem = $elem.parent();
  }
  return null;
}

ويمكن أن تقولوا لي ما إذا كان هناك وسيلة ذكية للقيام بهذه المهمة؟

نصائح أخرى

إضافة إلى @ 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)، واستخدام الأم (). الأقرب ()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top