最近在this question我询问了如何找出课程中是否存在样式。我被告知(通过skobaljic)我需要克隆元素。在调用元素(jQuery方法)的.clone()期间,生成的对象包含默认样式(例如,从样式表),因此插入的样式不包含在克隆中。这就是我理解它的方式。但是,当我需要检测是否存在6种风格时,克隆完整元素(包括所有可能是数字或数千的儿童元素)似乎很奇怪。我为jQuery的克隆方法编写了代码。有这个:
destElements = getAll( clone );
srcElements = getAll( elem );
因此函数getAll被调用两次。
然后我检查了包含getAll的内容:
var ret = typeof context.getElementsByTagName !== "undefined" ?
context.getElementsByTagName( tag || "*" ) :
typeof context.querySelectorAll !== "undefined" ?
context.querySelectorAll( tag || "*" ) :
[];
来自Mozilla手册:
Element.getElementsByTagName()方法返回实时 HTMLCollection具有给定标记名称的元素。子树 搜索指定元素下面的元素 本身。
Document.querySelectorAll() - 返回其中元素的列表 文档(使用文档的深度优先预订遍历 节点)匹配指定的选择器组。物体 返回的是NodeList。
因此很明显,创建元素的深层副本毫无意义,而且需要性能。当我需要进行深度搜索/比较而导致过度浪费资源时,这个问题仍然会加剧。我想克隆没有它的子元素的元素。这可能吗?克隆应包含默认样式,就像使用.clone()一样。怎么做?
答案 0 :(得分:1)
我相信这可以帮到你:
来源:http://www.w3schools.com/jsref/met_node_clonenode.asp
// Copy the element and its child nodes
var clone_with_child = yourElement.cloneNode(true);
// Copy only the element
var clone_without_child = yourElement.cloneNode(false);