我正在使用jQuery向DOM元素添加事件。在我这样做时,我经常使用技术上可以收集匹配项列表的选择器,而不仅仅是一个。例如使用.children()
和.find()
方法,我可以找到0个,1个或多个匹配的DOM元素。
我是否只需要在附加事件时检查每个元素上的.size() == 1
,或者是否有更简单的方法来执行此操作,例如具有预期匹配列的选择器如果预期数量不等于大小,则会失败?
我认为这似乎很愚蠢,因为我也输出HTML并且应该知道正确的答案,但是我有很多DOM操作,并且想知道是否有任何内置的健全性检查机制。
答案 0 :(得分:1)
您可以编写一个简单的扩展方法来执行您想要的操作,如下所示:
jQuery.fn.ifCount = function(count) {
return this.length === count ? this : $();
};
然后在您的代码中而不是每次if
,您可以在链中调用它,例如:
$("div").ifCount(2).css({ color: 'red' });
如果计数为2,则集合继续运行,.css()
在元素上运行。如果计数不是2,则会返回一个新的空集,因此.css()
无效。
如果你想绑定任意数量的元素并且不关心有多少元素,则无需检查任何内容,只需执行以下操作:
$("div").click(function() { .... });
如果有0,1或400 <div>
个元素,则无效。 jQuery的默认行为是只使用匹配元素继续链...如果有0个链中的函数只是在没有元素上执行,但它不会抛出错误。这不是特定于事件处理程序,它适用于任何jQuery代码(以及正确编写的插件)。
答案 1 :(得分:0)
您无需检查它们。只需使用该方法并在其上调用bind。如果它返回一个或多个元素,则所有元素都将具有事件绑定。如果它没有返回任何元素,它也不会抛出任何错误。
答案 2 :(得分:0)
您可以将选择放入局部变量,然后测试大小:
var items = $(".items");
if (items.length == 1) {
// Do you regular stuff here
} else if (items.length > 1) {
// Log error to the console
// Example: console.log('Too Many Items!!'); <- with firebug ofcourse
} else {
// console.log("Too Few Items");
}
您可以将错误记录到控制台,然后通过执行以下操作纠正问题以进一步执行代码:
console.log('Too Many Items!!');
items = items.first();
答案 3 :(得分:0)
我认为您应该设计选择器以满足您的需求。如果选择一个元素的目标 - 使用id选择器或返回一个元素或零$(“#”)的那些。单击(function_callback),如果需要更多 - 使用其他选择器。 http://api.jquery.com/category/events/
无论如何,当您以jQuery方式附加事件$(“”)。单击(或其他事件)时,您声明所有符合选择条件的元素都订阅了该事件。
答案 4 :(得分:0)
大多数情况下,您可以立即应用功能: $( “...”)成才();
您还可以尝试: $(“...”)。each(function(){ $(本).something(); });