[英]How to get dynamically loaded HTML tags with specific class from the page using JavaScript?
[英]How to get dynamically loaded HTML to be parsed using Javascript Jquery?
我正在使用Jquery将一些HTML动态添加到页面中。
现在,此新HTML代码应触发附加的Jquery函数以完成更多处理,但是此新HTML代码未被识别,因此将触发附加的Jquery函数。
我如何才能识别新的HTMl代码并触发附加功能?
谢谢
这取决于您想做什么。 首先要看的是jQuery的.live()方法。 您可以将事件与将来存在或将要存在的匹配元素相关联。 例如,此click方法将仅绑定到具有“ clickme”类的现有元素
$('.clickme').bind('click', function() {
// Bound handler called.
});
但是,如果使用.live()方法将其绑定,则它将适用于现有元素和创建的任何新元素:
$('.clickme').live('click', function() {
// Live handler called.
});
这些示例直接摘自live方法的API页面。 在这里查看: http : //api.jquery.com/live/
更多详细信息可能会有所帮助,但听起来您可能需要Jquery.live()。 Jquery.live()将处理程序动态绑定到元素。
通常有两个问题,事件处理程序和插件,这是两个不同的东西。
第1部分: 事件处理程序
事件处理程序很容易,因为它们对事件起作用,所以无论何时添加元素,事件的行为都相同。 对于这个有.live()
和.delegate()
.live()
监听的事件document
,如果一个事件来自于选择相匹配的元素运行,让我们一表行,例如:
$("tr").click(function() { ... });
当它运行并将click
事件处理程序绑定到它们时,它将查找所有当前表行,与.bind('click', function)
。 然后是.live()
,如下所示:
$("tr").live('click', function() { ... });
这侦听click
事件冒泡到document
(默认情况下会自动发生)并执行处理程序...当前和将来的元素在这里的行为相同。 这意味着它对两者都适用。 然后是.delegate()
,它是.live()
的本地版本,如下所示:
$("#myTable").delegate('tr', 'click', function() { ... });
如果您只是向#myTable
添加行而不是删除/添加表本身,则可以在其中放置用于冒泡事件的相同类型的侦听器,而不是一直在document
上进行监听,这意味着该事件在之前冒泡的次数更少到达您要执行的处理程序。
第2部分: 插件
插件有点棘手,因为它们获取元素并用它们做事(对于大多数插件而言都是如此)。 您在此处有两个不错的选择,要么是在自己添加新元素时运行插件,例如通过$.ajax()
加载,要么是简写形式,如下所示:
$.ajax({
//options...
success: function(data) {
//add elements
$("tr", data).myPlugin();
}
});
这将找到新的<tr>
元素,但仅在本地上下文中 (在返回的HTML中),并且仅对那些元素执行。 另外,有一个插件可以解决这个问题,效率较低,但通常在大多数页面上没有明显的区别。 .livequery()
插件会主动查找并使用新元素,相同的代码如下所示:
$("tr").livequery(function() {
$(this).myPlugin();
});
这些都是有效的解决方案,请看看哪种更适合您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.