В DOM нормально ли использовать .notation для получения / установки атрибутов? - PullRequest
5 голосов
/ 16 марта 2010

В DOM можно ли ссылаться на атрибуты элемента следующим образом:

var universe = document.getElementById('universe');
  universe.origin = 'big_bang';
  universe.creator = null;
  universe.style.deterministic = true;

? Мое глубокое уважение к объектам и их частной жизни, и мое чувство, что вещи могут пойти ужасно неправильно, если я не буду осторожен, заставляет меня хотеть сделать все больше как это:

var universe = document.getElementById('universe');
  if(universe.hasAttribute('origin')) then universe.origin = 'big_bang'; 

etc...

Действительно ли необходимо использовать эти методы доступа? Конечно, это может быть более или менее необходимым в зависимости от того, насколько я уверен, что элементы, которыми я манипулирую, будут иметь атрибуты, которые я ожидаю от них, но в целом парни из DOM считают правильным использовать .notation, а не методы получения и установки?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 16 марта 2010

Для документов XML вы должны использовать getAttribute / setAttribute / removeAttribute и т. Д. Нет сопоставления свойств JavaScript с атрибутами DOM.

Для документов HTML вы можете использовать getAttribute и др. Для доступа к атрибутам, но лучше этого не делать, поскольку IE6-7 испытывает трудности с этим. Свойства HTML DOM Level 2 не только более надежны, но и легче читаются.

Неясно, используете ли вы здесь документы XML или HTML. Ясно, что origin не является атрибутом HTML; «Пользовательские» элементы и атрибуты, подобные этому, не должны включаться в документы HTML. Но неясно, к чему относится universe.style.deterministic; вы не получите отображение стиля CSS без атрибута HTML style.

3 голосов
/ 16 марта 2010

Да, все в порядке ;-) Если в DOM есть атрибут, вы можете установить его или получить напрямую. Нет приватных или доступных только для чтения элементов или чего-либо еще. Кстати, в JavaScript нет ключевого слова then.

2 голосов
/ 16 марта 2010

Из-за кросс-браузерных проблем я всегда использую getAttribute и setAttribute:

if(!universe.getAttribute('origin'))
{
    universe.setAttribute('origin', 'big_bang');
}

Я не помню специфику, но у меня были проблемы со стилем свойства universe.origin и динамически создаваемыми элементами DOM.

0 голосов
/ 16 марта 2010

Нет, это не нормально. Большинство свойств объектов DOM могут быть перезаписаны. Вы не испортите поведение браузера, так как он не использует DOM API. Но вы испортите свои JS-скрипты, если они попытаются использовать перезаписанное свойство в его первоначальном значении.

Мой собственный способ сделать что-то, когда у меня есть несколько атрибутов для привязки к объекту (в отличие от одного флага или ссылки), это создать собственный объект и затем связать его с элементом DOM:

var Universe = {
  origin: "big_bang",
  creator: null,
  style: { deterministic: true }
};
document.getElementById('universe')._universe = Universe;
...