在DOM中可以使用.notation来获取/设置属性吗?

时间:2010-03-16 04:22:17

标签: javascript dom attributes standards

在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而不是getter和setter是可以的吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

是的,没关系;-) 如果DOM中有属性,您可以直接设置或获取它。 没有私人或只读元素或任何东西。顺便说一句,JavaScript没有'then'关键字。

答案 1 :(得分:3)

对于XML文档,必须使用getAttribute / setAttribute / removeAttribute等。没有从JavaScript属性到DOM属性的映射。

对于HTML文档,可以使用getAttribute等来访问属性,但最好不要因为IE6-7有困难。 DOM Level 2 HTML属性不仅更可靠,而且更易于阅读。

目前还不清楚您是否在使用XML或HTML文档。显然origin不是HTML属性; “自定义”元素和这样的属性不应包含在HTML文档中。但目前还不清楚universe.style.deterministic指的是什么;如果没有HTML style属性,您将无法获得CSS样式查找。

答案 2 :(得分:2)

由于跨浏览器问题,我总是使用getAttribute和setAttribute:

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

我不记得具体细节,但我遇到了属性样式 universe.origin 和动态创建DOM元素的问题。

答案 3 :(得分:0)

不,这样做并不好。 DOM对象的大多数属性都可以被覆盖。您不会破坏浏览器的行为,因为它不使用DOM API。但如果他们试图以原始含义使用覆盖属性,那么你将破坏你的JS脚本。

我自己的做事方式,当我有几个属性附加到对象(而不是单个标志或链接)时,是创建一个自定义对象,然后从DOM元素链接它:

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