كيفية التحقق مما إذا كان الكائن هو مثيل لـ NodeList في IE؟

StackOverflow https://stackoverflow.com/questions/151348

  •  02-07-2019
  •  | 
  •  

سؤال

لماذا لا يتم تعريف NodeList في IE6/7؟

<form action="/" method="post" id="testform">
    <input type="checkbox" name="foobar[]" value="1" id="" />
    <input type="checkbox" name="foobar[]" value="2" id="" />
    <input type="checkbox" name="foobar[]" value="3" id="" />    
</form>

<script type="text/javascript" charset="utf-8">
(function () {
    var el = document.getElementById('testform')['foobar[]']
    if (el instanceof NodeList) {
        alert("I'm a NodeList");
    }  
})();
</script>

يعمل هذا في FF3/Safari 3.1 ولكنه لا يعمل في IE6/7.هل لدى أي شخص أي أفكار حول كيفية التحقق مما إذا كان el هو مثيل لـ NodeList عبر جميع المتصفحات؟

لا يوجد حل صحيح

نصائح أخرى

"كتابة البط"يجب أن تعمل دائمًا:

...

if (typeof el.length == 'number' 
    && typeof el.item == 'function'
    && typeof el.nextNode == 'function'
    && typeof el.reset == 'function')
{
    alert("I'm a NodeList");
}

إجابة آدم فرانكو بالكاد يعمل.للأسف، typeof el.item إرجاع أشياء مختلفة في إصدار مختلف من IE (7:السلسلة، 8:الكائن، 9:وظيفة).لذلك أنا أستخدم الكود الخاص به، لكني غيرت السطر إلى typeof el.item !== "undefined" وتغيرت == ل === طَوَال.

if (typeof el.length === 'number' 
    && typeof el.item !== 'undefined'
    && typeof el.nextNode === 'function'
    && typeof el.reset === 'function')
{
    alert("I'm a NodeList");
}

أود فقط استخدام شيء يتم تقييمه دائمًا إلى نوع معين.ثم تقوم فقط بإجراء فحص النوع صواب/خطأ لمعرفة ما إذا كان لديك كائن صالح.في حالتك، سأحصل على مرجع للعنصر المحدد كما أنت الآن، ثم استخدم أسلوب getOptions() الخاص به للحصول على HTMLCollection الذي يمثل الخيارات.نوع الكائن هذا مشابه جدًا لـ NodeList، لذا لن تواجه أي مشكلة في التعامل معه.

مع مسج:

if (1 < $(el).length) {
    alert("I'm a NodeList");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top