1. 程式人生 > 實用技巧 >DOM節點的複製與替換

DOM節點的複製與替換

clone()

detach是剪下的話,clone就是複製了

clone(ture)傳遞一個布林值ture用來指定,這樣不僅僅只是克隆單純的節點結構,還要把附帶的事件與資料給一併克隆了。

JavaScript部分
$("div").on('click', function() {//執行操作})

//clone處理一
$("div").clone() //只克隆了結構,事件丟失

//clone處理二
$("div").clone(true) //結構、事件與資料都克隆

元素資料(data)內物件和陣列不會被複制,將繼續被克隆元素和原始元素共享。意思是不會copy元素資料和陣列(主要是記憶體上),所有copy的元素都共享一個

,如果改變其中一個的,就等於改變了所有的。

replaceWith()和replaceAll()

$("p:eq(1)").replaceWith('<a style="color:red">替換第二段的內容</a>')

$('<a style="color:red">替換第二段的內容</a>').replaceAll('p:eq(1)')
  • .replaceAll()和.replaceWith()功能類似,主要是目標和源的位置區別
  • .replaceWith()與.replaceAll() 方法會刪除與節點相關聯的所有資料和事件處理程式
  • html()只是把所匹配到的節點裡的內容給替換掉,而replaceWith()是把匹配到的這節點替換掉

wrap()包裹

將元素用其他元素包裹起來,也就是給它增加一個父元素

$('p').wrap('<div></div>')
//等同於
$('p').wrap(function() {
    return '<div></div>';
})

得到:

<div>
    <p>p元素</p>
</div>

unwrap()

將匹配元素集合的父級元素刪除,保留自身(和兄弟元素,如果存在)在原來的位置。例如:

<div>
    <p>p元素</p>
</div>

刪除這段程式碼中的div,一般常規的方法會直接通過remove或者empty方法,但是如果要保留內部元素p,使用:
$('p').unwarp()
找到p元素,然後呼叫unwarp方法,這樣只會刪除父輩div元素了。

wrapAll()

wrap是針對單個dom元素處理,如果要將集合中的元素用其他元素包裹起來,也就是給他們增加一個父元素

<p>p元素</p>
<p>p元素</p>
$('p').wrapAll('<div></div>')

得到:

<div>
    <p>p元素</p>
    <p>p元素</p>
</div>

如果是用$('p').wrap('')
得到:

<div>
    <p>p元素</p>
</div>
<div>
    <p>p元素</p>
</div>

wrapInner()

給集合中匹配的元素的內部,增加包裹的HTML結構.

<div>p元素</div>
<div>p元素</div>
$('div').wrapInner('<p></p>')

得到:

<div>
    <p>p元素</p>
</div>
<div>
    <p>p元素</p>
</div>