有两个方法是所有类型的节点都有的。第一个就是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://www.jxbh.cn 如转载请注明出处!