我正在使用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()動態地將處理程序綁定到元素。