$(e).attr(名称,值)与e.setAttribute(名称,值)的好处是什么?

Aka*_*ava 2 html javascript css jquery

案例:e是类型HtmlElement而不是css selector

我在谈论任何属性,而不仅仅是标准允许的属性,atom-type或者data-atom-type,无论名称是什么,它是否可以在没有jQuery的情况下工作?

我怀疑$(e).attr(name,value)它太慢了,首先它是创建一个完整的jQuery对象 ($(e) !== $(e) // two objects are not same)(jsPerf:http://jsperf.com/jquery-attr-vs-native-setattribute/28 )然后它调用某些检查,然后设置值,其中大多数浏览器轻松支持e.setAttribute.

有没有更换任何问题$(e).attr(name,value)e.setAttribute(name,value)

IE8支持setAttribute根据MSDN文档.是否有任何移动浏览器或任何不支持它的浏览器?

最终我想提高我的JavaScript框架的性能,最初我们广泛使用jQuery来实现其跨浏览器DOM功能.

我们现在已经明白,除非你正在使用css selector,否则attr,val,text当你有实例时,大多数函数都可以用它们的直接DOM计数器部分进行更好的调用HtmlElement.

T.J*_*der 5

我怀疑$(e).attr(name,value)它太慢了,首先它创建了一个完整的jQuery对象,然后调用某些检查,然后设置值,大多数浏览器都很容易支持e.setAttribute.

如果你测量它,你会发现性能上的差异相对来说很大,但绝对值是微不足道的,而且它是我们通常关心的绝对术语.它在99.999999%的情况下无关紧要.如果遇到特定的性能问题,并使用jQuery跟踪它,那么请考虑在那时进行优化.

$(e).attr(name,value)vs的好处是e.setAttribute(name,value)什么?

在你提到的具体情况,在这里e是一个HTMLElement,现在只有几个好处:

  • 有一些IE特定的错误setAttribute,jQuery适合你

  • 还有一些"属性"人,当他们真的应该设置一个属性,例如设置checkeddisabled; jQuery映射那些(现在这主要是传统功能,因为人们应该使用prop)

  • 它为你做一些布尔值的预处理,让你$(e).attr("checked", true)true真正应该的时候使用它"checked"

IE8根据MSDN文档支持setAttribute.是否有任何移动浏览器或任何不支持它的浏览器?

所有的浏览器都支持setAttribute.正如我前面提到的,IE的各种版本都有各种各样的错误,但它存在并且大部分都有效.