2011-04-13 142 views
0
<input type="text" name="name" value="" id="name"/> 
<input type="text" name="subject" value="" id="subject" /> 
<input type="text" name="message" value="" id="message" /> 

有人可以告诉我,如果我单独选择输入或让他们在一个交换。jquery选择器

var name = jQuery('#name'); 
var subject= jQuery('#subject'); 
var message = jQuery('#message'); 

相比,让他们在一个交换

jQuery(":input").each(function(){....};) 

我的意思是不会有jQuery的回去文档根目录,每次我打电话<input type="text" name="name" value="" id="name"/>

,如果从我的例子,我做这个

<input type="text" name="message" value="" id="message" /> 
<input type="text" name="name" value="" id="name"/> 

这意味着我问最后一个输入表单,然后询问后面的第1输入表格,它wouldnt使流动慢?

+1

格式化代码块,选择文本,然后按'CTRL + k'。它只是缩进他们4个空格。 – gideon 2011-04-13 07:29:30

+0

@giddy,谢了,我以为我在评论框中试过,它只会将我的光标重定向到Chrome的地址栏 – ianace 2011-04-13 07:42:51

+0

是的评论有限制格式化_''_评论中的作品。 – gideon 2011-04-13 08:14:02

回答

1

jQuery('#name');会比jQuery(":input")快很多。

jQuery('#name')将匹配选择器作为ID并通过ID返回项目,而:input将遍历输入类型的元素的整个dom。

如果你真的担心选择的表现,看看http://www.paulirish.com/perf

+0

感谢您的信息和链接,如果我有N个输入字段,这将意味着N数量的jQuery选择器吗?如果我单独为每个ID添加选择器,代码会膨胀吗?顺便说一句,输入应该像验证空输入验证..等 – ianace 2011-04-13 07:33:03

+1

将它们添加到数组,var selectors = [$(“#name”),$(“#message”)];并在该数组上使用$ .each。 – Peeter 2011-04-13 07:53:17

0

正如Peeter说,使用ID选择会快很多。

但是,您可以结合两者的优点 - 例如使用$('#id-of-your-form :input')

+0

我看到了,会通过上下文选择所有输入使其更快?有这种形式的'jQuery(选择器,[上下文])' – ianace 2011-04-13 07:34:50

+0

这似乎与ID有点多余,它不像你将有2个元素具有相同的ID,一个输入和另一个div。虽然是,但您可以检查ID是否是使用该方法的输入。 – Peeter 2011-04-13 07:35:25

+0

如果您的输入有ID,请使用这些ID。如果他们不这样做,请使用上下文,但请仔细阅读Paul Irish的视频以正确使用上下文。 – Peeter 2011-04-13 07:38:10

0

正如@ThiefMaster上面提到的那样,您可以使用$('#id-of-your-form :input')进行组合,但它也有perfomace问题,因为jQuery的Sizzle选择器引擎正在从右向左解析选择器。

为了获得更多的perfomace你可以用下面的方式

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

这将导致在具体的DOM元素的上下文选择搜索。 还要注意,它是什么不一样的

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

这将是国内“重构”像

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

如果您使用的ID选择(如#name),那么就可以使用document.getElementById方法,这非常有效。使用像:input这样的选择器至少需要多次调用getElementsByTagName,并循环遍历所有找到的元素以检查它们的真实含义。一些选择器,比如类选择器,更加昂贵,因为它需要遍历页面中的所有元素来查找匹配的元素。

如果你通过id选择元素,那么你选择哪个顺序并不重要。 jQuery分别评估每个选择器,它不指望你以任何特定的顺序查询元素。

您可以使用像#name,#subject,#message这样的选择器来获取同一个jQuery集合中的所有三个元素,如果您想对它们使用相同的方法,那么效率会更高。

0

如果你真的想加快您的查询比jQuery的是这样的:

<div id="inputs"> 
<input type="text" id="message" /> 
<input type="text" id="name" /> 
</div> 

的jQuery:

  1. 首先选择是 父元素..

    var inputsContainer = $("#inputs"); 
    
  2. 选择输入元素FROM父.. (wi会仅仅从容器并不是全部做查询DOM对象)

    var message = $("#message", inputsContainer); 
    var name = $("#name", inputsContainer); 
    
+0

如果“context”参数是jQuery对象,它将不会提供性能增益。您需要传递具体的DOM元素。 – Olegas 2011-04-13 07:44:03

+0

你的意思是这样的?var inputsContainer = $(“#inputs”)[0]; ? – 2011-04-13 07:51:54

+1

是的。试想一下,如果你作为上下文传递的jQuery对象包含多个元素?哪一个可以选择?那么,jQuery只是重写主选择器来完成这样的搜索。 – Olegas 2011-04-13 07:57:00