2011-01-21 5 views
25

У меня есть функция:Как проверить, является ли объект элементом DOM?

function Check(o) 
{ 
    alert(/* o is a DOM element ? "true" : "false" */); 
} 

Как я могу проверить, если параметр o является объектом DOM или нет?

+0

Любой узел DOM или определенный тип узла? – user113716

+0

@patrick Любой. Чтобы проверить конкретный, я мог бы просто проверить имя тега правильно? – BrunoLM

+0

Нет, 'tagName' выдаст тип элемента" 1-й тип ". Существует несколько других типов узлов. – user113716

ответ

45

Элемент DOM реализует интерфейс Element. Таким образом, вы можете сделать:

function Check(o) { 
    alert(o instanceof Element); 
} 
+5

Это лучший ответ. – geoyws

22

Проверьте, существует ли свойство nodeName.

В основном проверьте, является ли это Node: посмотрите на DOM lvl 1 specs, проверьте определение узла.

Если вы имели в виду это буквально, когда вы сказали Element чек на tagName недвижимости, посмотрите на определение элементов в той же спецификации

Подведем итоги, сделать что-либо

function Check(o) 
{ 
    alert(o.tagName ? "true" : "false"); 
} 

, чтобы проверить, если это Элемент DOM или

function Check(o) 
{ 
    alert(o.nodeName ? "true" : "false"); 
} 

, чтобы проверить, если это DOM Node

+0

или 'nodeType', или что-то еще является свойством корневого объекта' DOMElement'. –

+5

Это не кажется пуленепробиваемым. Что делать, если есть объект с этим именем? Это единственный способ? Я мог бы что-то еще ... – BrunoLM

+1

Ну, вы можете сделать его более безопасным, проверив против всех (или по крайней мере двух или трех) свойств и методов, которые эти объекты должны иметь, чтобы соответствовать спецификации, но это похоже на излишний ... –

0

Вы можете использовать следующую функцию

function isNode(o) 
{ 
    return o && 'nodeType' in o; 
} 
+1

Я считаю, что это должно быть '' nodeType 'в o', но хорошая чистая идея! –

+0

@BenRowe: Nate Barr прав, 'nodeType'' должен быть в кавычках, если нет, ваш код приводит к _" ReferenceError: nodeType не определен "_, поэтому, пожалуйста, отредактируйте свой пост! – Sk8erPeter

+0

Спасибо, я сделаю настройку –

9

Вместо того, чтобы просто проверка существования собственности, я бы проверить его конкретное значение.

Предполагается, что вы ищете элемент типа 1.

nodeType at MDC(docs)

function Check(o) { 
    alert(o && o.nodeType && o.nodeType === 1); 
} 

Вы можете все еще получить объект, который имеет nodeType свойство, которое на самом деле не DOM узел, но он также будет иметь соответствующее значение из 1 дать ложный положительный результат.

+3

Короче версия будет: obj && obj.nodeType === 1 – Meglio

0

Вы можете проверить, если узел DOM является элементом с JQuery:

element.is("*") 
Смежные вопросы