在将jQuery / javascript事件附加到元素时,我应该如何验证页面DOM?

时间:2010-07-21 19:05:56

标签: javascript jquery dom javascript-events

我正在使用jQuery向DOM元素添加事件。在我这样做时,我经常使用技术上可以收集匹配项列表的选择器,而不仅仅是一个。例如使用.children().find()方法,我可以找到0个,1个或多个匹配的DOM元素。

我是否只需要在附加事件时检查每个元素上的.size() == 1,或者是否有更简单的方法来执行此操作,例如具有预期匹配列的选择器如果预期数量不等于大小,则会失败?

我认为这似乎很愚蠢,因为我也输出HTML并且应该知道正确的答案,但是我有很多DOM操作,并且想知道是否有任何内置的健全性检查机制。

5 个答案:

答案 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(); });