jQuery中提供了一個(gè)非常有用的方法——clone(),它可以對(duì)指定的元素進(jìn)行深拷貝,返回一個(gè)新的jQuery對(duì)象。clone()方法可以復(fù)制元素本身以及下面所有的子元素、事件、屬性等等。下面我們來(lái)詳細(xì)介紹一下clone()方法。
$("elem").clone([deep [, withDataAndEvents]])
clone()方法可以接收兩個(gè)參數(shù),第一個(gè)參數(shù)是表示是否執(zhí)行深拷貝,默認(rèn)為false。當(dāng)參數(shù)為true時(shí),會(huì)將所有相關(guān)的子元素一起復(fù)制到新對(duì)象中。如果想要復(fù)制當(dāng)前元素本身,需要將參數(shù)設(shè)為true。
// 復(fù)制元素本身
$("#elem").clone(true);
// 復(fù)制元素本身以及所有子元素
$("#elem").clone(true, true);
第二個(gè)參數(shù)表示是否連同元素的附加特性、數(shù)據(jù)、事件等一起復(fù)制到新對(duì)象中。默認(rèn)情況下,只有元素本身被復(fù)制到新對(duì)象中,而不包括元素的數(shù)據(jù)、事件等。
// 復(fù)制元素本身和數(shù)據(jù)和事件
$("#elem").clone(true, true);
// 只復(fù)制元素本身
$("#elem").clone(false, false);
需要注意的是,在有些情況下,如果元素中存在一些動(dòng)態(tài)添加的腳本、樣式等,它們可能不會(huì)被復(fù)制到新對(duì)象中,這時(shí)候需要手動(dòng)處理。
clone()方法還可以用于實(shí)現(xiàn)常見(jiàn)的模板復(fù)制功能。我們可以將模板代碼放在一個(gè)隱藏的div中,然后通過(guò)clone()方法來(lái)復(fù)制該模板并進(jìn)行填充。
<div id="template" style="display:none">
<span class="name"></span>
<span class="age"></span>
</div>
<script>
// 復(fù)制模板,并進(jìn)行數(shù)據(jù)填充
var $newObj = $("#template").clone(true);
$newObj.find(".name").text("Tom");
$newObj.find(".age").text("20");
$("#container").append($newObj);
</script>
這就是jQuery中clone()方法的基本使用方法,可以幫助我們輕松地進(jìn)行元素的拷貝和數(shù)據(jù)填充。