Как проверить, является ли объект экземпляром списка узлов в 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");
}

Я бы просто использовал что-то, что всегда соответствует определенному типу.Затем вы просто выполняете проверку типа true / false, чтобы убедиться, что у вас есть допустимый объект.В вашем случае я бы получил ссылку на элемент выбора, как сейчас, а затем использовал его метод GetOptions(), чтобы получить HTMLCollection, представляющий параметры.Этот тип объекта очень похож на список узлов, поэтому у вас не должно возникнуть проблем с работой с ним.

С jQuery:

if (1 < $(el).length) {
    alert("I'm a NodeList");
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top