一尘不染

getAttribute()与Element对象的属性?

javascript

表达式喜欢Element.getAttribute("id")并且Element.id返回相同的东西。

当我们需要HTMLElement对象的属性时,应该使用哪一个?

这些方法和getAttribute()和有没有跨浏览器的问题setAttribute()

还是直接访问对象属性与使用这些属性方法之间的性能影响?


阅读 258

收藏
2020-05-01

共1个答案

一尘不染

getAttribute检索DOM元素的 属性 ,而el.id检索此DOM元素的 属性 。他们不一样。

大多数情况下,DOM属性与属性同步。

但是,同步 不能保证相同的值 。一个典型的例子是间el.hrefel.getAttribute('href')对一个锚定元件。

例如:

<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>

发生这种现象的原因在于,根据W3C,href属性必须是格式正确的链接。大多数浏览器都遵守此标准(猜测谁不这样做?)。

inputchecked属性还有另一种情况。DOM属性返回truefalse而属性返回字符串"checked"或空字符串。

然后,有些属性 仅单向 同步。最好的例子是元素的value属性input。通过DOM属性更改其值不会更改属性(编辑:检查第一个注释以更精确)。

由于这些原因,我建议您继续使用DOM 属性 ,而不要使用属性,因为它们的行为在浏览器之间是不同的。

实际上,只有两种情况需要使用属性:

  1. 自定义HTML属性,因为它没有同步到DOM属性。
  2. 要访问一个内置的HTML属性,这是不是从属性同步,并且你确定你所需要的属性(例如,原来value的的input元素)。
2020-05-01