10

可能重复:
JavaScript setAttribute vs .attribute=
javascript dom,如何处理“特殊属性”与属性?

很多时候,在论坛或诸如 Usenet 之类的地方,一些人(在批评我的代码时)告诉我,而不是说,例如,var link = a.href我应该使用var link = a.getAttribute('href');。并在想要分配时使用其互补的setAttribute() 。

他们说这是正确的做法,我错了,等等等等……我通常不会注意那些。当我问为什么没有人给出真正的答案时。

现在我很好奇在哪种情况下更适合使用一种或另一种。

在什么情况下更适合说var link = a.getAttribute('href');而不是var link = a.href
在什么情况下我应该使用setAttribute()来分配而不是直接通过其标识符为成员分配值?即:`a.href = 'someURL';

4

2 回答 2

13

每当有人推荐一种做法时,他们应该始终证明该建议的合理性。

不使用getAttributesetAttribute的原因是 IE 版本(包括 8)至少在这些 DOM 方法的实现中存在错误。此外,浏览器在更改 DOM 属性以响应get/setAttribute的使用方面也存在差异。

但是,浏览器在 DOM 属性方面非常一致,因此如果使用 DOM 属性,编写跨浏览器代码要简单得多。唯一需要注意的是,一些浏览器不会为非标准 HTML 属性创建 DOM 属性,但它们都会使用属性来设置它们。

一个额外的好处是 DOM 属性访问比使用函数调用get/setAttribute快得多。

HTML5 试图标准化其中的一些行为,但 HTML5 的问题在于它不是 W3C 标准(可能永远不会),它是一个“活的规范”,它不仅试图记录浏览器的行为(更多或少),还有它的作者希望他们在不区分两者的情况下做的事情。因此,虽然它作为一种“竣工”规范和愿望清单很有帮助,但作为标准却毫无用处。

编辑 2017 年 7 月

W3C 发布HTML 5 规范已经有一段时间了(包括编号版本和更改列表),WHATWG 还发布了几乎每天更新的HTMLDOM标准,但没有说明发生了什么变化。一个或另一个最终可能会放弃。

于 2011-09-02T03:27:58.820 回答
1

我使用直接属性访问,就像obj.href它是所有浏览器都支持的标准属性一样,因为我发现代码更具可读性并且可以工作。

如果它是一个非标准属性,或者是我自己编造的一种在对象上存储一些数据的方法,我使用get/setAttribute().

我不知道为什么人们应该总是使用get/setAttribute(),而且我从来没有在任何浏览器中遇到过使用obj.id, obj.href, obj.className,obj.value等的问题......

于 2011-09-02T03:44:49.053 回答