有兩個方法是所有類型的節(jié)點都有的。第一個就是cloneNode(),用于創(chuàng)建調(diào)用這個方法的節(jié)點的一個完全相同的副本。cloneNode()方法接受一個布爾值參數(shù),表示是否執(zhí)行深復制。在參數(shù)為true的情況下,執(zhí)行深復制,也就是復制節(jié)點及其整個子節(jié)點樹;在參數(shù)為false的情況下,執(zhí)行淺復制,即只復制節(jié)點本身。復制后返回的節(jié)點副本屬于文檔所有,但并沒有為它指定父節(jié)點。因此,這個節(jié)點副本就成為了一個“孤兒”,除非通過appendChild()、insertBefore()或replaceChild()將它添加到文檔中。例如,假設(shè)有下面的HTML代碼:
item l
item 2
item 3
知果我們已經(jīng)將
元素的引用保存在了變量myList中,那么通常下列代碼就可以看出使用cloneNode()方法的兩種模式:
var deepList=myList.cloneNode(true);
alert (deepList.childNodes.length); //3(IE)或7(其他瀏覽器)
var shallowList=myList. cloneNode(false);
alert( shallowList. childNodes. length); //0
提示:cloneNode()方法不會復制添加到DOM節(jié)點中的Javascript屬性,例如事件處理程序等,這個方法只復制特性,(在明確指定的情況下也復制)子節(jié)點,其他一切都不會復制.IE在此存在一個BUG,即它會復制事件處理程序,所以南昌網(wǎng)站建設(shè)設(shè)計公司技術(shù)人員建議在復制前最好先移除事件處理程序
在這個例子中,deepList中保存著一個對myList執(zhí)行深復制得到的副本。因此,deepList中包含3個列表項,每個列表項中都包含文本。而變量shallowList中保存著對myList執(zhí)行淺復制得到的副本,因此它不包含子節(jié)點。
我們要介紹的最后一個方法是normalize(),這個方法唯一的作用就是處理文檔樹中的文本節(jié)點。由于解析器的實現(xiàn)或DOM操作等原因,可能會出現(xiàn)文本節(jié)點不包含文本,或者接連出現(xiàn)兩個文本節(jié)點的情況。當在某個節(jié)點上調(diào)用這個方法時,就會在該節(jié)點的后代節(jié)點中查找上述兩種情況。如果找到了空文本節(jié)點,則刪除它;如果找到相鄰的文本節(jié)點,則將它們合并為一個文本節(jié)點。
本文僅限內(nèi)部技術(shù)人員學習交流,不得作于其他商業(yè)用途.原創(chuàng)文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://syshcw.cn 如轉(zhuǎn)載請注明出處!