setAttribute和htmlElement.attribute =' value'之间的区别

时间:2015-09-26 04:59:17

标签: javascript setattribute

两者之间会有什么区别,

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

b1.id='b1';

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

1 个答案:

答案 0 :(得分:5)

  

setAttribute和htmlElement.attribute ='value'

之间的区别

后一位htmlElement.attribute='value'不太准确。你没有在那里设置属性,你正在设置一个属性。

内存中的DOM元素实例具有各种属性,某些连接到属性或与属性相关,而其他属性则没有。

另一方面,

属性是从HTML标记直接读取的名称/值对(如果序列化DOM元素,例如通过访问其innerHTML属性,写入你得到的标记。)

当属性和属性以某种方式相关/链接时,该属性称为反射属性(属性的属性)。有时,反射属性的名称与属性的名称不完全相同(class变为classNamefor变为htmlFor),有时它们之间的链接不是' t 1:1。

例如,idid属性的反射属性。但是选择框具有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,不区分大小写),但实际上浏览器会将任何当前属性视为"",而不管它的实际内容。

  • 根本不会在属性中反映多个属性,因此设置它们不会设置/更改任何属性。

  

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

它永远不会给照顾带来足够大的差异,所以没关系。它也可能因浏览器而异。