我正在使用Jquery动态地添加一些HTML到页面中。如何获得动态加载的HTML使用Javascript Jquery解析?
现在这个新的HTML代码应该触发额外的Jquery函数来完成更多的处理,但是这个新的HTML代码没有被识别,因此额外的Jquery函数不会被触发。
我该如何获得新的HTMl代码来识别并触发附加功能?
Thanx
我正在使用Jquery动态地添加一些HTML到页面中。如何获得动态加载的HTML使用Javascript Jquery解析?
现在这个新的HTML代码应该触发额外的Jquery函数来完成更多的处理,但是这个新的HTML代码没有被识别,因此额外的Jquery函数不会被触发。
我该如何获得新的HTMl代码来识别并触发附加功能?
Thanx
通常有两个问题,事件处理程序和插件,这是两个不同的东西。
第1部分:事件处理程序
事件处理程序是很容易的,因为它们作用于事件,事件的行为相同,无论是添加的元素时。对于这个有上document
.live()
和.delegate()
,.live()
监听事件,如果事件来自于选择相匹配的元素运行,让我们一表行,例如:
$("tr").click(function() { ... });
这将找到所有当前表行,当它运行并将一个click
事件处理程序绑定到它们时,与.bind('click', function)
相同。再有就是.live()
,像这样:
$("tr").live('click', function() { ... });
这侦听click
事件to bubble up到document
(这是自动发生的,默认情况下),并执行处理...当前和未来元素表现在这里以同样的方式。这意味着它适用于两者。再有就是.delegate()
这是.live()
这样的本地版本:
$("#myTable").delegate('tr', 'click', function() { ... });
如果你只是添加行#myTable
但不删除/添加表本身,冒泡事件可以坐在那里同类型的听众的,而不是在document
上的所有方式,这意味着事件在到达要执行的处理程序之前不得不冒泡次数较少。
第2部分:插件
插件是有点棘手,因为他们需要的元素和与他们无关的事情(这是正确的最插件)。你有两个不错的选择这里,无论是运行插件时,新元素自己,例如通过$.ajax()
或shorthand version加载应该是这样的:
$.ajax({
//options...
success: function(data) {
//add elements
$("tr", data).myPlugin();
}
});
此发现新<tr>
元素,但只有在当地context(以返回的HTML)并仅在这些元素上执行。另外,这里有一个插件,效率较低,但通常在大多数页面上并不明显。 The .livequery()
plugin积极寻找并充当了新的元素,相同的代码是这样的:
$("tr").livequery(function() {
$(this).myPlugin();
});
无论这些都是有效的解决方案,只是看哪个适合您的需要更好。
这取决于你想要做什么。首先要看的是jQuery的.live()方法。您可以将事件与未来存在或将存在的匹配元素相关联。例如,如果你将它绑定使用the.live()方法,那么这个click方法将只绑定到现有元素与类“clickme”的
$('.clickme').bind('click', function() {
// Bound handler called.
});
但是,它会为现有的元素和新元素时工作创建的:
$('.clickme').live('click', function() {
// Live handler called.
});
这些示例直接在实时方法的API页面中进行。看看这里:http://api.jquery.com/live/
更多细节可能会有所帮助,但它听起来像Jquery.live()可能是你所需要的。 Jquery.live()动态地将处理程序绑定到元素。