Відповіді:
tagName
Властивість призначене спеціально для вузлів елементів (тип 1 вузлів) , щоб отримати тип елемента .
Існує також декілька інших типів вузлів (коментар, атрибут, текст тощо). Щоб отримати ім’я будь-якого з різних типів вузлів, ви можете використовувати nodeName
властивість .
Використовуючи nodeName
проти вузла елемента , ви отримаєте його ім'я тега, тому його можна використовувати справді, хоча ви будете мати кращу узгодженість між браузерами при використанні nodeName
.
Це досить гарне пояснення різниці між ними.
Доданий текст із статті:
tagName
іnodeName
обидва корисні властивості Javascript для перевірки імені елемента html. Для більшості цілей або буде добре, але nodeName є кращим, якщо ви підтримуєте лише браузери A класу, а tagName є кращим, якщо ви також маєте намір підтримувати IE5.5.Є два питання з
tagName
:
- У всіх версіях IE, tagName повертається,
!
коли викликається у вузлі коментаря- Для текстових вузлів, тегName повертається,
undefined
тоді як nodeName повертається#text
nodeName
Є свій набір питань, але вони менш серйозні:
- IE 5.5 повертається
!
при виклику на вузол коментаря. Це менш шкідливо, ніж tagName, який страждає від такої поведінки у всіх версіях IE- IE 5.5 не підтримує nodeName для
document
елемента або для атрибутів. Жодне з них не повинно викликати особливих практичних цілей, але це слід пам’ятати в будь-якому випадку- Konqueror ігнорує вузли коментарів при використанні цього властивості. Але знову ж таки, Konqueror, поряд з IE 5.5, не є браузером A класу
Тому для більшості практичних цілей дотримуйтесь
nodeName
завдяки підтримці більш широкого спектру сценаріїв та потенційно кращої сумісності вперед. Не кажучи вже про те, що він не ікає на вузлі коментарів, який має тенденцію повзати в код без повідомлення. Не турбуйтеся про IE 5.5 або Konqueror, оскільки їх частка на ринку становить майже 0%.
Про ці властивості читайте в специфікації DOM Core.
nodeName
- властивість, визначена в інтерфейсі вузла
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095
tagName
- властивість, визначена в інтерфейсі Element
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815
btw Інтерфейс вузла реалізується кожним вузлом у DOM-дереві (включаючи сам document
об’єкт). Інтерфейс Element реалізований лише тими вузлами в дереві DOM, які представляють елементи в HTML-документі (вузли з nodeType
=== 1).
Ось що відбувається в Firefox 33 та Chrome 38:
HTML:
<div class="a">a</div>
Js:
node = e
node.nodeType === 1
node.nodeName === 'DIV'
node.tagName === 'DIV'
node = e.getAttributeNode('class')
node.nodeType === 2
node.nodeName === 'class'
node.tagName === undefined
node = e.childNodes[0]
node.nodeType === 3
node.nodeName === '#text'
node.tagName === undefined
Так:
nodeType
для отримання типу вузла: nodeName
перерви дляnodeType === 1
tagName
дляnodeType === 1
nodeName
ламається nodeType === 1
"?