Почему НЕ все атрибуты тега доступны как свойства соответствующего объекта?
Допустим есть некий элемент div:
<div id='divID' name='myDiv' myAttr='some volume'>Мой див :)</div> В коде получаем соответствующий ему объект:
var myDiv = document.getElementById("divID");
Почему у этого объекта (myDiv) некоторые свойства доступны и соответствуют атрибутам элемента, например: console.log( myDiv.id ); // выводит divID console.log( myDiv.innerHTML ); // выводит Мой див :) А свойство name не доступно: console.log( myDiv.name ); // выводит undefined C myAttr вроде понятно - доступ к нему только через myDiv.getAttribute( "myAttr" ). Но почему name не доступно как свойство myDiv.name ? |
Keramet,
name - не универсальный атрибут, он имеет смысл только для якорей и элементов формы. Потому для прочих тегов он "не подхватывается" в свойства объекта. |
Цитата:
|
Цитата:
http://htmlbook.ru/html/attr/common |
http://www.w3schools.com/tags/ref_st...attributes.asp
Атрибут name для тега А не поддерживается в HTML5. |
Keramet, только валидные атрибуты могут быть доступны как свойства, но у них тоже есть некоторые особенности, например: атрибут класс не будет доступен как свойство "class", так как это зарезервированное имя, поэтому необходимо указывать className, или такие свойства как disabled, checked и т.д. всегда будут возвращать булево значение, независимо от значения атрибута.
У дивов name не бывает, поэтому и не работает, так как это не валидно. Лучше использовать data-* атрибуты: <div id="myDiv" data-name="foo"></div> myDiv.dataset.name; //foo Ну или написать свой геттер/сеттер:
Object.defineProperty(HTMLDivElement.prototype, 'name', {
get: function() {
return this.getAttribute('name') || '';
},
set: function(value) {
this.setAttribute('name', value);
}
});
<div id="myDiv" name="foo"></div> myDiv.name; //foo |
Ruslan_xDD,
спасибо |
| Часовой пояс GMT +3, время: 14:24. |