我编写了一段代码,基本上是选择所有的input type=text
元素,就像这样:
$('.sys input[type=text]').each(function () {}
我该如何将其更改为选择 input[type=text]
或 select
?
我编写了一段代码,基本上是选择所有的input type=text
元素,就像这样:
$('.sys input[type=text]').each(function () {}
我该如何将其更改为选择 input[type=text]
或 select
?
使用普通的 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')
。
我个人认为第一个替代方案最易读 :), 不过你有什么看法?
$('.sys').children('input[type=text], select').each(function () { ... });
编辑:实际上,上面的代码等同于子选择器.sys > input[type=text]
。如果你想要后代选择器(.sys input[type=text]
),你需要使用@NiftyDude提供的选项。
更多信息:
chilren
而不是 children
。 - pomeh如果您需要迭代表单或表格中作为文本的多个输入,则可以采用以下方法:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
我的做法是检查每个输入是否设置为“文本”,然后它会获取该元素并将其存储在jQuery列表中。然后,它将遍历该列表。您可以像这样为当前迭代设置临时变量:
var $currentItem = $(this);
$('input[type=text],select', '.sys');
for循环:
$('input[type=text],select', '.sys').each(function() {
// code
});
$
的调用对你的应用程序来说如此重要,请避免使用 jQuery :)。这个答案试图回答 OP 的问题,如果这是一个关于性能的问题,那么这个答案首先就不会存在。无论如何,感谢你的评论:) - Andreas Wong$
调用的性能问题,而是关于一个应用程序中所有$
调用的问题。在我看来,当有多种做同一件事情的方法时,我尽可能选择执行效果更好的方法,因为慢速性能
===不满意的用户
。此外,我们可以 都回答 OP 的问题并提供每个答案的优缺点(就像您所做的那样),同时解释为什么所有答案都不同,但提供相同的结果。另外,我们也可以编写执行速度缓慢的原生 JavaScript 代码:JavaScript
!==performance
。 - pomeh$().find()
。 - BlackPanther