两者之间会有什么区别,
b1.setAttribute('id','b1');
和
b1.id='b1';
其中一个比另一个更有效率?并且他们两个会完成相同的任务吗?在某些情况下他们会有所不同吗?
答案 0 :(得分:5)
setAttribute和htmlElement.attribute ='value'
之间的区别
后一位htmlElement.attribute='value'
不太准确。你没有在那里设置属性,你正在设置一个属性。
内存中的DOM元素实例具有各种属性,某些连接到属性或与属性相关,而其他属性则没有。
另一方面, 属性是从HTML标记直接读取的名称/值对(如果序列化DOM元素,例如通过访问其innerHTML
属性,写入你得到的标记。)
当属性和属性以某种方式相关/链接时,该属性称为反射属性(属性的属性)。有时,反射属性的名称与属性的名称不完全相同(class
变为className
,for
变为htmlFor
),有时它们之间的链接不是' t 1:1。
例如,id
是id
属性的反射属性。但是选择框具有selectedIndex
属性,没有属性。
他们俩都会完成同样的任务吗?
他们在某些情况下会有所不同吗?
取决于属性/属性:
id
和其他几个直接反映:设置id
属性并设置id
属性完全相同。另外,对于htmlFor
属性/ for
属性也是如此(除了那些在setAttribute
中有错误的旧IE),rel
属性/属性,{ {1}} / className
属性(旧IE上有class
中存在错误的除外),表单字段上的setAttribute
属性以及其他一些元素name
和表单上的method
属性/属性以及其他几个属性/属性。
另一方面,action
属性未设置value
属性()。它只是从中获取默认值。在大多数浏览器上(此时为“全部”?),有一个单独的value
属性, 直接反映defaultValue
属性。
value
属性与相对于绝对链接的href
属性略有不同。该属性可以包含相对路径,使用href
可以获得相对路径;如果您阅读属性(str = elm.getAttribute("href")
),它将始终是绝对路径(例如,已解析的路径)。将str = elm.href
属性设置为相对路径会将属性设置为该路径,但再次读取href
属性将为您提供绝对(已解决)版本。将href
属性设置为绝对路径会将属性设置为该绝对路径。
有几个布尔属性表示为布尔值(true / false),但由于属性值始终是字符串,因此属性不存在为false({{1} }返回href
)或那里是真的。如果它在那里,它必须具有值getAttribute
或与其名称相同(例如,null
,不区分大小写),但实际上浏览器会将任何当前属性视为""
,而不管它的实际内容。
根本不会在属性中反映多个属性,因此设置它们不会设置/更改任何属性。
其中一个比另一个更有效吗?
它永远不会给照顾带来足够大的差异,所以没关系。它也可能因浏览器而异。