jquery委托语法.each()

时间:2011-06-14 15:52:00

标签: jquery delegates

我无法使用委托来获取$ .each等效语法。

我阅读的所有示例都只显示了点击或悬停,但我将如何使用委托语法编写此内容?

$("ul li a").each(function(){

    $(this).addClass("foo");

});

干杯!!

编辑:遵循众多评论(感谢方式)我认为我最好发布一个更明确的例子。我对前一个问题中缺乏细节表示歉意。

比如说我想将工具提示绑定到页面上的锚点。我会将很多项目设置为提示,我希望通过使用委托来减少内存开销。

据我所知,这是我开始的方式:

$(document).delegate("a.tooltip", "click", function(event){

// run click event

}).delegate("a.tooltip", "hover", function(event){

// run mousenter, mouseleave events.

});

但是让我们说每个锚点我想删除title属性,以便在我悬停时它不会显示在浏览器中。我想(虽然我猜这里),任何像这样的本地事件都会在我的悬停事件之前运行,所以我想在我悬停之前删除它。

通常我会使用这样的东西:

$("a.tooltip").each(function () {
    // Store our title attribute and remove it so we don't get browser 
    //tooltips showing up.
    $.prop(this, "data-old-title", $.attr(this, "title"));
}).removeAttr("title");

这可以做得更好吗?

根据我在评论和答案中的理解,代表仅涵盖事件,我仍然必须将这样的事情分开。

3 个答案:

答案 0 :(得分:5)

你可能对.delegate()是什么或它是如何工作有误解。它是某种拦截所有DOM操作的魔术函数,它只是利用了DOM的事件冒泡功能,因此它只能用于事件。

基本上,如果您有一个<div>元素,您打算稍后添加<button>,则可以使用.delegate()将click事件绑定到<div>本身

将来,当您执行添加按钮时,单击该按钮将触发按钮的click事件,它将继续冒泡DOM,连续调用每个父元素的click事件,直到它到达文档根目录或其中一个处理程序调用{​​{1}}。有一次,它会到达你的event.stopPropagation(),在那里你绑定了你的委托事件。委托事件将检查最初触发事件的元素是否与原始选择器(您想要首先绑定事件)相匹配,如果匹配,则会在上下文中触发附加事件处理程序 你的按钮,所以在事件处理程序中看起来像按钮抛出事件。

如你所见,没有任何魔力,它与监视DOM的变化或类似的东西无关。如果要在向DOM添加元素时添加特殊类,则必须确保在发生这种情况时自己调用函数。

答案 1 :(得分:0)

$("ul").delegate("a", "hover", function(){
    $(this).addClass("hover");
});

答案 2 :(得分:0)

.delegate()没有jQuery等同于.each()

Delegate允许您将事件处理程序附加到现在或将来存在的对象。

每个允许你循环遍历一组对象

如果您想根据某些事件将类foo添加到锚标记,那么您可以执行以下操作:

$('ul li').delegate('a', 'click', function(){
    $(this).addClass("foo");
});