我无法使用委托来获取$ .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");
这可以做得更好吗?
根据我在评论和答案中的理解,代表仅涵盖事件,我仍然必须将这样的事情分开。
答案 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");
});