jquery选择器

jquery选择器,jquery,jquery-selectors,Jquery,Jquery Selectors,而不是一次换货 var name = jQuery('#name'); var subject= jQuery('#subject'); var message = jQuery('#message'); 我的意思是,jquery不是每次调用时都必须返回到文档根目录吗 如果从我的例子来看,我是这样做的 jQuery(":input").each(function(){....};) 这意味着我查询了最后一个输入表单,然后又查询了第一个输入表单,这会不会使流程变慢?jQuery'name';将

而不是一次换货

var name = jQuery('#name');
var subject= jQuery('#subject');
var message = jQuery('#message');
我的意思是,jquery不是每次调用时都必须返回到文档根目录吗

如果从我的例子来看,我是这样做的

jQuery(":input").each(function(){....};)
这意味着我查询了最后一个输入表单,然后又查询了第一个输入表单,这会不会使流程变慢?

jQuery'name';将比jQuery:input快很多

jQuery'name'将匹配选择器作为ID并按ID返回项,而:input将遍历整个dom以查找input类型的元素


如果您真的担心选择器的性能,请查看一下

,正如Peeter所说,使用ID选择器会快得多


但是,您可以结合这两种方法的优点,例如使用$'id-of-your-form:input'。

如上@ThiefMaster所述,您可以使用$'id-of-your-form:input'进行组合,但这也存在性能问题,因为jQuery的Sizzle选择器引擎正在从右到左解析选择器

要获得更高的性能,您可以使用以下方法

<input type="text" name="message" value="" id="message" />
<input type="text" name="name" value="" id="name"/>
这将导致在具体DOM元素的上下文中进行选择器搜索。 还要注意的是,它与

$(':input', $('#id-of-your-form').get(0))
这将在内部进行重构,如

$(':input', $('#id-of-your-form')) 

如果使用类似名称的id选择器,那么它可以使用document.getElementById方法,这是非常有效的。使用诸如:input这样的选择器,至少需要多次调用getElementsByTagName,并循环遍历所有找到的元素,以检查它们到底是什么。有些选择器(如类选择器)甚至更昂贵,因为它需要循环页面中的所有元素以查找匹配的元素

如果您按id选择元素,那么无论您按哪个顺序选择都无关紧要。jQuery分别计算每个选择器,它不希望您以任何特定顺序查询元素


您可以使用诸如名称、主题、消息之类的选择器来获取同一jQuery集合中的所有三个元素,如果您想对它们使用相同的方法,这将更加高效。

如果您确实想比jQuery这样更快地进行查询:

$('#id-of-your-form :input')
从父元素中选择输入元素。。 将只从容器而不是整个DOM对象执行查询

var inputsContainer = $("#inputs");

看看这些文章。它们为您提供了一些关于选择性能的良好见解


要格式化代码块,请选择文本并按ctrl+k。它只是将它们缩进了4个空格。@giddy,谢谢你让它运行起来了,虽然我在评论框中尝试过,但它只会将我的光标重定向到chromeyes的地址栏。评论限制了``作品在评论中的格式。谢谢你的信息和链接,如果我有N个输入字段,这意味着N个jquery选择器,对吗?那么,如果我为每个id单独添加选择器,代码会膨胀吗?顺便说一句,输入应该像检查空输入一样进行验证。。etcAdd它们到一个数组,var选择器=[$name,$message];在数组中使用$。我明白了,通过上下文选择所有输入会使它更快吗?有了这个表单jQuery选择器,[context]似乎与ID有点冗余,这不像你会有两个相同ID的元素,一个是输入,另一个是div。虽然是,你可以用这个方法检查ID是否是输入。如果你的输入有ID,就用它们。如果他们没有,请使用上下文,但查看Paul Irish的视频以正确使用上下文。@peeter如果我有N个输入,那么我必须为每个输入id编写单独的选择器,那么,我如何在速度和必须写入N个选择器之间取得平衡呢?如果上下文参数是jQuery对象,它将不会提供性能增益。您需要传递具体的DOM元素。您的意思是这样吗?变量inputsContainer=$inputs[0]?对试想一下,如果作为上下文传递的jQuery对象包含多个元素?选择哪一个?jQuery只是重写了主选择器来完成这样的搜索。
<div id="inputs">
<input type="text" id="message" />
<input type="text" id="name" />
</div>
var inputsContainer = $("#inputs");
var message = $("#message", inputsContainer);
var name = $("#name", inputsContainer);