JavaScript / jQuery选择器上的函数适用于在读取函数之前页面上的元素。例如,
$('.foo').css('color', 'red');
在读取此部分代码时适用于具有类foo
的元素,但不适用于稍后通过JavaScript / jQuery函数(例如append()
等)插入的元素。是否存在一种定义在插入元素时自动应用的钩子的方法吗?
答案 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 您的通话的任何元素。
然而,JQuery确实有一个聪明的小方法叫做“live()”,它可能适用于你的需求。
描述:为现在和将来与当前选择器匹配的所有元素附加事件处理程序。
live()的替换是on()。但是on()不像live()那样工作,并且为了使它适用于将来的元素,你必须在未来元素的PARENT元素中放置一个“on”事件处理程序。
有关详细信息,请参阅此答案:Turning live() into on() in jQuery