JQuery 有一個(gè)非常有用的方法,它可以克隆元素,同時(shí)克隆元素的所有事件處理程序,它就是 .clone() 方法。
但是當(dāng)我們克隆節(jié)點(diǎn)并對(duì)其進(jìn)行修改時(shí),可能會(huì)遇到問題。這是因?yàn)榭寺≡貎H克隆了最初的 HTML,而不是 DOM 中的實(shí)際狀態(tài),比如事件處理程序。
為了正確克隆節(jié)點(diǎn),我們必須同時(shí)克隆節(jié)點(diǎn)及其子節(jié)點(diǎn)的事件處理程序。此時(shí)我們可以使用 .clone(true) 方法,它將同時(shí)克隆元素及其所有后代元素的事件處理程序。
// 克隆元素及其事件處理程序 var $clone = $elem.clone(true); // 修改克隆節(jié)點(diǎn)的元素屬性 $clone.attr("id", "new-id"); // 修改克隆節(jié)點(diǎn)的子節(jié)點(diǎn) $clone.find(".child-element").text("new text"); // 將克隆節(jié)點(diǎn)添加到 DOM 中 $clone.appendTo("#container");
通過使用 .clone(true) 方法,我們可以避免由于克隆導(dǎo)致的事件處理程序失效,同時(shí)也能正確修改克隆節(jié)點(diǎn)。
需要注意的是,當(dāng)克隆節(jié)點(diǎn)進(jìn)行修改后,如果需要對(duì)克隆節(jié)點(diǎn)及其后代元素重新綁定事件,我們可以在修改后再次調(diào)用 .clone(true) 方法來生成一個(gè)包含最新事件處理程序的克隆節(jié)點(diǎn)。