有兩個方法是所有類型的節點都有的。第一個就是cloneNode(),用于創建調用這個方法的節點的一個完全相同的副本。cloneNode()方法接受一個布爾值參數,表示是否執行深復制。在參數為true的情況下,執行深復制,也就是復制節點及其整個子節點樹;在參數為false的情況下,執行淺復制,即只復制節點本身。復制后返回的節點副本屬于文檔所有,但并沒有為它指定父節點。因此,這個節點副本就成為了一個“孤兒”,除非通過appendChild()、insertBefore()或replaceChild()將它添加到文檔中。例如,假設有下面的HTML代碼:
item l
item 2
item 3
知果我們已經將
元素的引用保存在了變量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節點中的Javascript屬性,例如事件處理程序等,這個方法只復制特性,(在明確指定的情況下也復制)子節點,其他一切都不會復制.IE在此存在一個BUG,即它會復制事件處理程序,所以南昌網站建設設計公司技術人員建議在復制前最好先移除事件處理程序
在這個例子中,deepList中保存著一個對myList執行深復制得到的副本。因此,deepList中包含3個列表項,每個列表項中都包含文本。而變量shallowList中保存著對myList執行淺復制得到的副本,因此它不包含子節點。
我們要介紹的最后一個方法是normalize(),這個方法唯一的作用就是處理文檔樹中的文本節點。由于解析器的實現或DOM操作等原因,可能會出現文本節點不包含文本,或者接連出現兩個文本節點的情況。當在某個節點上調用這個方法時,就會在該節點的后代節點中查找上述兩種情況。如果找到了空文本節點,則刪除它;如果找到相鄰的文本節點,則將它們合并為一個文本節點。
本文僅限內部技術人員學習交流,不得作于其他商業用途.原創文章出自:南昌網站建設公司-百恒網絡 http://m.51yjwy.com 如轉載請注明出處!
十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!



