钩子适用于稍后插入的元素

时间:2013-05-13 22:35:56

标签: javascript jquery

JavaScript / jQuery选择器上的函数适用于在读取函数之前页面上的元素。例如,

$('.foo').css('color', 'red');

在读取此部分代码时适用于具有类foo的元素,但不适用于稍后通过JavaScript / jQuery函数(例如append()等)插入的元素。是否存在一种定义在插入元素时自动应用的钩子的方法吗?

2 个答案:

答案 0 :(得分:2)

使用$('.foo')作为您的选择器会将所有元素与foo类匹配,无论它们是否已在加载后添加。

对于活动: 已从较新版本的jQuery中删除.live(),因此您应使用.on()。这是一个例子:

$(document).on('click', '.foo', function(){
    // click event code here
});

此活动将在加载网页时与.foo元素匹配,以及通过.append().html()等加载的任何元素。

<强>更新

我想我明白你的意思了。有一个名为Live Query的插件可以解决您的问题。只需包含它然后使用:

$('.foo').livequery(function() { 
    $(this).css('color', 'red');
}); 

这是一个有效的演示:http://jsfiddle.net/5jJAE/

答案 1 :(得分:0)

我不确定我完全理解你的问题,但让我试着回答。

动态元素会计数!

在JQuery选择器上调用方法时,它适用于DOM中符合选择条件的所有对象。

为了清楚起见,这包括动态添加的元素。例如,采用下面的方法“隐藏”,应用于动态插入的元素。

$('body').append('<h1 id="test" style="display:none;">HI!</h1>');
$('#test').show();

因此,并不是JQuery不适用于动态插入的元素,它不适用于尚不存在的元素。换句话说,它不适用于添加 AFTER 您的通话的任何元素。

live()方法

然而,JQuery确实有一个聪明的小方法叫做“live()”,它可能适用于你的需求。

  

描述:为现在和将来与当前选择器匹配的所有元素附加事件处理程序。

http://api.jquery.com/live/

更新 - 不推荐使用live(),但可以使用on()

live()的替换是on()。但是on()不像live()那样工作,并且为了使它适用于将来的元素,你必须在未来元素的PARENT元素中放置一个“on”事件处理程序。

有关详细信息,请参阅此答案:Turning live() into on() in jQuery