Почему НЕ все атрибуты тега доступны как свойства соответствующего объекта?
Допустим есть некий элемент 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, время: 15:56. |