我试图将两种类型的输入分成他们自己的jQuery包装集,因为它们需要根据id是否包含'-add-new-'
而被不同地处理。我知道我可以使用过滤器两次执行此操作,如下所示:
var seriesTabInputs = $msSeriesTabs.find('input').filter(function() {
return $(this).attr('id').indexOf('-add-new-') == -1;
});
var addNewTabInputs = $msSeriesTabs.find('input').filter(function() {
return $(this).attr('id').indexOf('-add-new-') >= 0;
});
然而,对我来说,过滤两次似乎效率低下,因为我知道它需要第二次循环。有没有办法避免这种情况?
答案 0 :(得分:2)
尝试如下:
var addNewTabInputs = $msSeriesTabs.find('input[id*="-add-new-"]');
var seriesTabInputs = $msSeriesTabs.find('input[id]:not([id*="-add-new-"])');
OR
var addNewTabInputs = $msSeriesTabs.find('input[id*="-add-new-"]');
var seriesTabInputs = $msSeriesTabs.find('input[id]').not(addNewTabInputs);
答案 1 :(得分:1)
为了提供使用特定选择器的替代方法,您可以遍历jQuery集并随时构建两个集合。由于应用于集合的操作不同,我不知道这会更快。
INSERT INTO uniqueEntries
SELECT actualEntries.*
FROM actualEntries
LEFT JOIN uniqueEntries
ON uniqueEntries.User_ID = actualEntries.User_ID
WHERE uniqueEntries.User_ID IS NULL
GROUP BY User_ID
答案 2 :(得分:0)
除非您处理大量元素,否则避免过滤两次可能并不那么重要。此外,当您过滤两次时,有一些内容可以说明代码的一致性。
话虽如此,有一种方法可以避免过滤两次,甚至可能是教学的;下面是一些可用于实现此目的的代码。
首先,我们创建一个可以添加的空包装集,这可以通过var seriesTabInputs = $(false);
来实现。有关详细信息,请参阅this write-up。
然后在过滤器内部,我们有条件地添加到seriesTabInputs
,但请注意我们执行此操作的方式:我们不断重新分配seriesTabInputs = seriesTabInputs.add($(this));
如果您只是在没有seriesTabInputs.add($(this))
的情况下调用seriesTabInput
分配给var seriesTabInputs = $(false);
var addNewTabInputs = $msSeriesTabs.find('input').filter(function() {
if ($(this).attr('id').indexOf('-add-new') >= 0) {
return true;
}
else {
seriesTabInputs = seriesTabInputs.add($(this));
}
});
,最终会得到一个空数组。请参阅jQuery docs for .add()
,它给出了一个类似的错误示例,并声明此类用法"不会保存添加的元素,因为.add()方法会创建一个新的集合"。
{{1}}