Javascript setAttribute和HtmleElement.attribute='value'之间的差异

Javascript setAttribute和HtmleElement.attribute='value'之间的差异,javascript,setattribute,Javascript,Setattribute,这两者之间有什么区别 b1.setAttribute('id','b1'); 及 其中一个比另一个更有效率吗?他们两个会做完全相同的任务吗?在某些情况下它们会有所不同吗 setAttribute和HtmleElement.attribute='value'之间的差异 后一位htmlElement.attribute='value'不太准确。你不是在那里设置属性,而是在设置属性 内存中的DOM元素实例具有各种属性,其中一些连接到属性或与属性相关,而另一些则不连接 另一方面,属性是直接从HTML标

这两者之间有什么区别

b1.setAttribute('id','b1');

其中一个比另一个更有效率吗?他们两个会做完全相同的任务吗?在某些情况下它们会有所不同吗

setAttribute和HtmleElement.attribute='value'之间的差异

后一位htmlElement.attribute='value'不太准确。你不是在那里设置属性,而是在设置属性

内存中的DOM元素实例具有各种属性,其中一些连接到属性或与属性相关,而另一些则不连接

另一方面,属性是直接从HTML标记中读取的名称/值对,如果序列化DOM元素(例如通过访问其innerHTML属性),则会将其写入返回的标记中

当属性和属性以某种方式关联/链接时,该属性称为属性的反射属性。有时,反射属性的名称与属性的名称类变为className、for变为htmlFor不完全相同,有时它们之间的链接不是1:1

例如,id是id属性的反射属性。但是选择框有一个selectedIndex属性,它没有属性

他们两个会做完全相同的任务吗

在某些情况下它们会有所不同吗

它取决于属性/属性:

id和其他几个直接反映出来:设置id属性和设置id属性做完全相同的事情。顺便说一句,htmlFor属性/for属性也是如此,除了在setAttribute中有bug的旧IE,rel属性/属性,className/class属性,除了在setAttribute中有bug的旧IE,表单字段和一些其他元素上的name属性,表单上的方法和操作属性/属性,还有其他几个

另一方面,value属性根本不设置value属性。它只是从中获取默认值。在大多数浏览器上都有一个单独的defaultValue属性,它直接反映了value属性

href属性与href属性在相对链接与绝对链接方面略有不同。属性可以包含一个相对路径,使用str=elm.getAttributehref可以得到该相对路径;如果读取属性str=elm.href,它将始终是一个绝对路径,例如解析路径。将href属性设置为相对路径会将属性设置为该路径,但再次读取href属性将获得绝对解析版本。将href属性设置为绝对路径会将属性设置为该绝对路径

有几个布尔属性表示为布尔值true/false,但由于属性值始终是字符串,因此该属性不存在于false中getAttribute返回null或存在于true中。如果存在,则它必须具有值或与其名称相同的值,例如multiple=multiple,不区分大小写,尽管在实践中,浏览器会将任何present属性视为true,而不管其实际内容如何

一些属性根本不会反映在属性中,因此设置它们不会设置/更改任何属性

其中一个比另一个更有效率吗


它永远不会有足够大的区别去关心,所以这并不重要。它也可能因浏览器而异。

更重要的是了解它可能具有的不同效果,这取决于所设置的属性。在绝大多数情况下,直接设置属性更简单,也更受支持,除非您有特定的理由设置属性,并且可以处理与此相关的各种怪癖。我认为如果存在属性,则它必须具有与其名称相同的值,例如,multiple=multiple,不区分大小写。这是真的,但是,根据这个答案,很明显,根据它是XHTML还是HTML5,它的解释略有不同。@LGSon:答案被否决时,那句话不在那里。:-在任何情况下,这都与标记有关,而不是通过JavaScript与属性交互时该属性可以具有的值。否决票可能是因为有人认为答案缺乏细节,也可能是过去几天我收到的一连串随机否决票中的一张,包括与这张相同的几年前的答案。
b1.id='b1';