繁体   English   中英

如何获取动态加载的HTML以使用Javascript Jquery进行解析?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM