2013-10-27 9 views
0

Я хочу знать, является ли переменная myVar узлом.Как проверить, является ли переменная узлом?

я мог проверить myVar.nodeType, но тогда я мог бы быть одураченным {nodeType:1}

Тогда мне интересно, если я могу сделать что-то вроде

myVar instanceof Node 

Edit

Забавный, кажется, что есть конструктор Node, поэтому instanceof Node работает, действительно!

я должен был попытаться, если мое предположение работал, прежде чем спрашивать ...


Пожалуйста, не отмечайте на мой вопрос, как дубликат Check if variable is a valid node element, потому что это другой вопрос предполагает, что myVar является узлом или пуст , Но мой вопрос не предполагает ничего.

+0

В чем проблема с 'myVar.nodeType === 1'? – kol

+0

Какую поддержку браузера вам нужно достичь? Ваш представленный код не будет работать в IE <= 8. –

+0

@kol Как я уже сказал, меня можно одурачить '{nodeType: 1}': '({nodeType: 1}). NodeType! == void (0)' возвращает 'true', но' {nodeType: 1} ' не является узлом – Oriol

ответ

3

Попробуйте window.document instanceof Node в разных браузерах. Он возвращает true в IE11, GC30, FF24 и Opera17, поэтому он должен работать и для других Node s.

В старых браузерах, таких как IE8, интерфейс Node - undefined. Я протестировал пару interfaces как HTMLDivElement для div узлов, но они слишком специфичны, поэтому их нужно было бы в || в очень длинное логическое выражение. Самый общий интерфейс, который работает в IE8, - Element: window.document.body, а его дочерние узлы - это экземпляры Element. Интересно, что window.document не является Element (это HTMLDocument).

+0

Ха-ха, я должен был попробовать, если бы мое предположение работало, я этого не ожидал! – Oriol

+1

@Oriol просто отметьте, что 'Node' на самом деле не является конструктором , а скорее открытый DOM-интерфейс ([ссылка] (https://developer.mozilla.org/en-US/docs/DOM/DOM_Reference)). В прошлый раз, когда я проверил, нет стандарта, должны ли они быть выставлены или нет , поэтому вы должны проверить, работает ли он в браузерах, которые вы поддерживаете. –