我在某些代码中看到了这种模式...
currency = $(document.getElementById('currency'));
期望在功能上等同于......
currency = $('#currency');
我猜这个想法是让选择器更快,因为它不需要解析选择字符串......但是它真的能产生明显的区别吗?还有别的东西在玩我还没考虑过吗?
为什么会有人使用这种模式?
答案 0 :(得分:3)
在内部,当解析传递的选择器字符串时,jQuery会自动检测到您已通过id
选择器并为您调用document.getElementById
。
所以,当你在调用jQuery之前自己获取元素时,你只是保存了选择器解析部分,但对于大多数用例来说这是微不足道的。
请参阅source
答案 1 :(得分:2)
使用第一个sintax没有任何意义 - 两者都做同样的事情(在第二部分你跳过解析jq查询) - jq也可以缓存请求 - 所以恰到好处$('#..')并保持你的代码干净
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,表明存在显着的百分比差异:
...但是,除非你在一个循环中做了数百万次,否则在现实世界中,它并不重要。另请注意,正在测试的内容如此之快,以至于错误边距可能会很大。
答案 3 :(得分:0)
$(document.getElementById('currency'));
的可读性较差,最终无论如何都会调用getElementById
。在大多数情况下,你不会看到它的效果(元素被缓存,只会被调用一次)。
答案 4 :(得分:-1)
如果支持,则使用document.querySelector()
,如果不支持,则使用document.getElementById()
在我看来,对于非jquery purpopses,document.querySelector()
更好(对我而言)
document.querySelector("#id .class > tag.nested");