如何使用Javascript Jquery来解析动态加载的HTML?

时间:2010-07-09 13:18:49

标签: javascript jquery html

我正在使用Jquery动态地将一些HTML添加到页面中。

现在这个新的HTML代码应该触发额外的Jquery函数,以便能够完成更多的处理,但是这个新的HTML代码无法识别,因此不会触发额外的Jquery函数。

如何识别新的HTMl代码并触发其他功能?

感谢名单

3 个答案:

答案 0 :(得分:1)

这取决于你想做什么。首先要研究的是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/

答案 1 :(得分:0)

更多细节可能会有所帮助,但听起来像Jquery.live()可能就是您所需要的。 Jquery.live()动态地将处理程序绑定到元素。

答案 2 :(得分:0)

通常有2个问题,事件处理程序和插件,这是两个不同的事情。


第1部分:事件处理程序

事件处理程序很简单,因为它们对事件起作用,无论何时添加元素,事件的行为都相同。为此,.live().delegate().live()侦听document上的事件,并在事件来自与选择器匹配的元素时运行,让我们以表格行为例:

$("tr").click(function() { ... });

这会找到所有当前表行,当它运行并将click事件处理程序绑定到它们时,与.bind('click', function)相同。然后有.live(),就像这样:

$("tr").live('click', function() { ... });

这会监听click事件to bubble updocument(默认情况下会自动发生)并执行处理程序...当前和未来的元素在这里的行为方式相同。这意味着它适用于两者。然后是.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();
});

这些都是有效的解决方案,只需看看哪个更适合您的需求。