【发布时间】:2012-05-18 09:15:44
【问题描述】:
我写了一个代码,基本上像这样选择所有input type=text元素:
$('.sys input[type=text]').each(function () {}
如何将其更改为选择input[type=text] 或select?
【问题讨论】:
标签: javascript jquery
我写了一个代码,基本上像这样选择所有input type=text元素:
$('.sys input[type=text]').each(function () {}
如何将其更改为选择input[type=text] 或select?
【问题讨论】:
标签: javascript jquery
使用普通的 css 选择器:
$('.sys input[type=text], .sys select').each(function() {...})
如果你不喜欢重复:
$('.sys').find('input[type=text],select').each(function() {...})
或者更简洁,传入context 参数:
$('input[type=text],select', '.sys').each(function() {...})
注意:在内部 jQuery 会将上述转换为 find() 等效
在内部,选择器上下文是用 .find() 方法实现的, 所以 $('span', this) 等价于 $(this).find('span')。
我个人认为第一个替代方案是最易读的 :),不过你可以接受
【讨论】:
context form 使用find form,find form 比context form 更有效(避免调用函数)。这对几乎所有使用的选择器都有效。然后,IMO find form 比 normal CSS selector 更有效,因为选择器的两个部分都是相对于根节点的,而在 find form 中,只有 .sys 部分是相对于它的,然后是 @987654336 @ 是在一组更小的元素上执行的,因此它可能会更快(但这需要通过测试来验证)
$ 调用的性能对你的应用来说是重要,请完全避免使用jQuery :)。这个答案试图回答 OP 的问题,如果它是性能问题,那么这个答案首先不会在这里。无论如何感谢您的评论:),感谢它
$ 呼叫的性能,而是关于一个应用程序中存在的所有$ 呼叫。 IMO,当你有不同的方式做同样的事情时,我总是尽量选择表现更好的一种。 slow performance === unhappy users。此外,我们可以 both 用多个答案回答一个 OP 的问题(就像您所做的那样),并提供每个答案的优点/不便(就像我在评论中所做的那样)。 IMO 重要的是要注意为什么所有答案都不同,同时提供相同的结果。此外,我们可以编写执行缓慢的普通 JavaScript 代码:JavaScript !== performance
$,具体分类您的 div 并使用 document.getElemenById/ElementsByClassName,而不是与通过$ 对选择器进行大量检查/字符串解析相比,jQuery 并不以其高性能库而闻名。老实说,我还没有看到一个应用程序因为调用$ 太多而变慢,如果你有一个有这个问题的网站,请告诉我,我很感兴趣 :)
$('.sys').children('input[type=text], select').each(function () { ... });
编辑:实际上,上面的这段代码相当于子选择器.sys > input[type=text],如果你想要后代选择(.sys input[type=text]),你需要使用@NiftyDude 给出的选项。
更多信息:
【讨论】:
chilren而不是children
如果您有多个输入作为表单或表格中的文本需要遍历,我这样做了:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
我所做的是检查每个输入以查看类型是否设置为“文本”,然后它会抓取该元素并将其存储在 jQuery 列表中。然后,它将遍历该列表。您可以像这样为当前迭代设置一个临时变量:
var $currentItem = $(this);
这会将当前项目设置为每个循环的当前迭代。然后你可以对 temp 变量做任何你想做的事情。
希望这对任何人都有帮助!
【讨论】:
$('input[type=text],select', '.sys');
循环:
$('input[type=text],select', '.sys').each(function() {
// code
});
【讨论】: