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

pra*_*ora 2 javascript setattribute

这两者之间有什么区别,

b1.setAttribute('id','b1');
Run Code Online (Sandbox Code Playgroud)

b1.id='b1';
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 5

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

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

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

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

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

因此,例如,id属性的反射id属性.但是选择框有一个selectedIndex没有属性的属性.

他们俩都会完成同样的任务吗?

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

这取决于属性/属性:

  • id和其他几个直接反映:设置id属性和设置id属性完全相同.另外,htmlFor属性/ for属性也是如此(除了那里有bug的旧IE setAttribute),rel属性/属性,className/ class属性(旧IE上除了那里有bug setAttribute),name表单字段上的属性和一些其他元件时,methodaction性质/属性的形式,和其他几个人.

  • value物业,而另一方面,不设置value属性可言.它只是从中获取默认值.大多数浏览器("都"在这一点?),有一个单独的defaultValue属性,它直接反映value属性.

  • href属性href与相对于绝对链接的属性略有不同.该属性可以包含相对路径,并使用str = elm.getAttribute("href")给出相对路径; 如果你读取属性(str = elm.href),它将始终是一个绝对路径(例如,已解析的路径).将href属性设置为相对路径会将属性设置为该路径,但再次读取teh href属性将为您提供绝对(已解决)版本.将href属性设置为绝对路径会将属性设置为该绝对路径.

  • 有几个布尔属性表示为布尔值(true/false),但由于属性值始终是字符串,因此该属性要么不是 false(getAttribute返回null),要么是true.如果它在那里,它必须具有""与其名称相同的值(例如,multiple="multiple"不区分大小写),尽管在实践中浏览器将任何当前属性视为true与其实际内容无关.

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

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

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