JavaScript/jQuery 选择器上的函数适用于读取函数之前页面上的元素。例如,
$('.foo').css('color', 'red');
适用于foo
在读取这部分代码时具有类的元素,但不适用于稍后通过 JavaScript/jQuery 函数(如append()
等)插入的元素。有没有办法定义一个钩子,在插入一个元素?
JavaScript/jQuery 选择器上的函数适用于读取函数之前页面上的元素。例如,
$('.foo').css('color', 'red');
适用于foo
在读取这部分代码时具有类的元素,但不适用于稍后通过 JavaScript/jQuery 函数(如append()
等)插入的元素。有没有办法定义一个钩子,在插入一个元素?
使用$('.foo')
as 您的选择器将使所有元素与foo
类匹配,无论它们是否在加载后添加。
对于事件:
.live()
已从较新版本的 jQuery 中删除,因此您应该使用.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/
我不确定我是否完全理解你的问题,但让我试着回答一下。
当您在 JQuery 选择器上调用方法时,它适用于 DOM 中与您的选择器条件匹配的所有对象。
需要明确的是,这包括动态添加的元素。例如,采用下面的“隐藏”方法,应用于动态插入的元素。
$('body').append('<h1 id="test" style="display:none;">HI!</h1>');
$('#test').show();
因此,并不是说 JQuery 不适用于动态插入的元素,而是它不适用于尚不存在的元素。换句话说,它不适用于在您调用之后添加的任何元素。
但是,JQuery 确实有一个聪明的小方法,称为“live()”,它可能适用于您的需要。
描述:为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。
live() 的替代品是on()。但是 on() 不像 live() 那样工作,并且要使其适用于未来元素,您必须在未来元素的 PARENT 元素中放置一个“on”事件处理程序。
有关更多详细信息,请参阅此答案:Turning live() into on() in jQuery