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

时间:2015-03-21 08:02:21

标签: javascript jquery html css

案例:e类型为HtmlElement,而非css selector

我说的是任何属性,而不仅仅是标准允许的属性,如atom-typedata-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)是否有任何问题?

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

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

我们现在已经明白,除非您使用css selector,否则当您拥有attr,val,text的实例时,大多数函数(例如HtmlElement)都会使用其直接DOM计数器部分进行调用。

1 个答案:

答案 0 :(得分:5)

  

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

如果您measure it,您会发现相对而言,效果差异很大,但绝对值 微不足道 它是我们通常关心的绝对术语。它在99.999999%的情况下并不重要。如果遇到特定的性能问题,并使用jQuery跟踪它,那么然后会考虑在那时进行优化。

  

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

在您提到的具体案例中,eHTMLElement,只有几个好处:

  • setAttribute中有一些特定于IE的错误,jQuery为你工作

  • 有一些"属性"人们在确实应该设置属性时设置,例如checkeddisabled; jQuery映射那些(现在这主要是遗留功能,因为人们应该使用prop

  • 它为您做了一些布尔值的预处理,让您在$(e).attr("checked", true)确实应该true时使用"checked"

  

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

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