可能重复:
JavaScript setAttribute vs .attribute=
javascript dom, how to handle "special properties" as versus attributes?
很多时候,在论坛或Usenet这样的地方我被一些人(批评我的代码时)告诉我,而不是说,例如var link = a.href
我应该使用var link = a.getAttribute('href');
。并且在想要分配时使用其互补的 setAttribute()。
他们说这是正确的做法,我错了,等等等等......我通常不会注意那些。当我问为什么没有人给出真正的答案时。
现在我很好奇在哪些情况下更适合使用其中一种。
在哪些情况下更适合说var link = a.getAttribute('href');
而不是var link = a.href
?
在什么情况下,我使用 setAttribute()来分配,而不是直接通过其标识符为成员分配值?即:`a.href ='someURL';
答案 0 :(得分:13)
每当有人推荐练习时,他们应该总是证明这些建议是正确的。
不使用 getAttribute 和 setAttribute 的原因是IE版本,包括8版本,至少在这些DOM方法的实现中存在错误。此外,浏览器在更改DOM属性以响应 get / setAttribute 的使用方面存在差异。
但是,浏览器在DOM属性方面非常一致,因此如果使用DOM属性,编写跨浏览器代码要简单得多。唯一需要注意的是,某些浏览器不会为非标准HTML属性创建DOM属性,但它们都会使用属性设置它们。
额外的好处是DOM属性访问比使用 get / setAttribute 的函数调用要快得多。
HTML5正在尝试标准化其中一些行为,但HTML5的问题在于它是而不是W3C标准(并且可能永远不会)并且它是一个“生活规范”不仅要记录浏览器的功能(或多或少),还要记录其作者希望他们做什么而不区分两者。 因此,虽然它作为一种“内置”规范加上愿望清单是有用的,但它作为标准是无用的。
W3C已发布HTML 5 specifications一段时间了(包括编号版本和更改列表),WHATWG也发布了HTML和DOM标准,几乎每天更新但没有表明发生了什么变化。其中一方可能最终放弃。
答案 1 :(得分:1)
我使用像obj.href
这样的直接属性访问,因为它是所有浏览器都支持的标准属性,因为我发现代码更具可读性并且有效。
如果它是非标准属性,或者我自己编写了一个在对象上存储一些数据的方法,我使用get/setAttribute()
。
我知道没有理由为什么应该始终使用get/setAttribute()
而且我在使用obj.id
,obj.href
,obj.className
,{{1}的任何浏览器中都没有遇到任何问题等等...