2010-07-09 41 views
1

我正在使用Jquery动态地添加一些HTML到页面中。如何获得动态加载的HTML使用Javascript Jquery解析?

现在这个新的HTML代码应该触发额外的Jquery函数来完成更多的处理,但是这个新的HTML代码没有被识别,因此额外的Jquery函数不会被触发。

我该如何获得新的HTMl代码来识别并触发附加功能?

Thanx

回答

0

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


第1部分:事件处理程序

事件处理程序是很容易的,因为它们作用于事件,事件的行为相同,无论是添加的元素时。对于这个有上document.live().delegate().live()监听事件,如果事件来自于选择相匹配的元素运行,让我们一表行,例如:

$("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(); 
}); 

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

1

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

0

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