document.getElementById作为jQuery选择器

时间:2015-08-04 07:50:08

标签: javascript jquery

我在某些代码中看到了这种模式...

currency = $(document.getElementById('currency'));

期望在功能上等同于......

currency = $('#currency');

我猜这个想法是让选择器更快,因为它不需要解析选择字符串......但是它真的能产生明显的区别吗?还有别的东西在玩我还没考虑过吗?

为什么会有人使用这种模式?

5 个答案:

答案 0 :(得分:3)

在内部,当解析传递的选择器字符串时,jQuery会自动检测到您已通过id选择器并为您调用document.getElementById

所以,当你在调用jQuery之前自己获取元素时,你只是保存了选择器解析部分,但对于大多数用例来说这是微不足道的。

请参阅source

答案 1 :(得分:2)

使用第一个sintax没有任何意义 - 两者都做同样的事情(在第二部分你跳过解析jq查询) - jq也可以缓存请求 - 所以恰到好处$('#..')并保持你的代码干净 enter image description here http://jsperf.com/document-getelementbyid-as-jquery-selector

答案 2 :(得分:1)

  

我在某些代码中看到了这种模式...

     

货币= $(document.getElementById('货币'));

     

期望在功能上等同于......

     

currency = $(' #currency');

现在,是的。当IE6和IE7还在现场时,它还没有回来。 IE7及更早版本中的(ls "D:\tomcat.log").LastWriteTime.ToString("dd/MM/yyyy HH:mm:ss") 已被破坏,并且会返回匹配getElementById以及匹配name的元素。 jQuery(1.x)内置了智能来处理破旧的浏览器。值得庆幸的是,微软在IE8中修复了这个问题。

  

我猜这个想法是让选择器更快,因为它不需要解析选择字符串...但是它真的会产生明显的区别吗?

它可能会产生实际的差异,但不能转化为现实世界中可感知的任何东西。唯一可以确定的方法是{DOM}代表你想知道答案的DOM,以及你想知道答案的浏览器上的test it(尽管JSPerf目前似乎遇到了问题。)

Here's a test 没有使用代表性的DOM,表明存在显着的百分比差异:

enter image description here

...但是,除非你在一个循环中做了数百万次,否则在现实世界中,它并不重要。另请注意,正在测试的内容如此之快,以至于错误边距可能会很大。

答案 3 :(得分:0)

$(document.getElementById('currency'));的可读性较差,最终无论如何都会调用getElementById。在大多数情况下,你不会看到它的效果(元素被缓存,只会被调用一次)。

答案 4 :(得分:-1)

如果支持,则使用document.querySelector(),如果不支持,则使用document.getElementById() 在我看来,对于非jquery purpopses,document.querySelector()更好(对我而言)

 document.querySelector("#id .class > tag.nested");