Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用getAttribute()还是不使用getAttribute():这就是问题所在_Javascript_Attributes_Setattribute_Members_Getattribute - Fatal编程技术网

Javascript 使用getAttribute()还是不使用getAttribute():这就是问题所在

Javascript 使用getAttribute()还是不使用getAttribute():这就是问题所在,javascript,attributes,setattribute,members,getattribute,Javascript,Attributes,Setattribute,Members,Getattribute,可能重复: 很多时候,在论坛或像Usenet这样的地方,一些人(在批评我的代码时)告诉我,我应该使用var-link=a.href而不是说我应该使用var-link=a.getAttribute('href')取而代之。并在想要分配时使用其互补的setAttribute() 他们说这是正确的方法,我错了,诸如此类。。。我通常不会注意这些。当我问为什么没有人给出真正的答案 现在我很好奇,在哪些情况下使用一种或另一种更合适 在什么情况下更适合说var link=a.getAttribute('h

可能重复:

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

他们说这是正确的方法,我错了,诸如此类。。。我通常不会注意这些。当我问为什么没有人给出真正的答案

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

在什么情况下更适合说
var link=a.getAttribute('href')而不是
var link=a.href


在什么情况下,我应该使用setAttribute()来赋值,而不是直接通过标识符将值赋值给成员?i、 e:`a.href='someURL'

每当有人推荐一种做法时,他们都应该证明这些建议是正确的

不使用getAttribute和setAttribute的原因是,在8个IE版本之前(含8个)的IE版本中,这些DOM方法的实现中至少存在错误。此外,浏览器在如何响应get/setAttribute的使用而更改DOM属性方面也存在差异

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

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

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

2017年7月编辑
W3C已经发布了一段时间(包括编号的版本和变更列表),WHATWG也发布了标准,几乎每天都有更新,但没有指出发生了什么变化。一个或另一个最终可能会放弃。

当它是所有浏览器都支持的标准属性时,我使用直接属性访问,如
obj.href
,因为我发现代码可读性更高,而且可以工作

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


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

HTML5作为一个标准是无用的,直到浏览器制造商一致支持它为止:-)那一天看起来已经不远了。@Pointy-假设标准在同一时间没有太大变化。每个人都要升级他们的浏览器。在处理表单时,如果您需要from元素的属性,并且避免获取输入字段,.getAttribute()是至关重要的。@enyo—一个更好的策略是在命名表单控件时避免使用标准的表单属性名。例如,如果调用控件
submit
或“reset”,则
getAttribute
将不起作用。