2010-07-09 79 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()動態地將處理程序綁定到元素。