我使用getElementById
当我需要克隆的div元素。
码:
printHTML( document.getElementById("div_name").cloneNode(true));
现在,我需要使用getElementsByClassName
当使用CloneNode不工作getElementsByClassName
。 我怎样才能把类的名字会在这里?
谢谢
编辑:
当我尝试使用此:
printHTML( $('.dataTables_scroll').clone(true) );
你可以看到我的功能:
function printHTML(clonedDive){
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
iframe.contentWindow.onunload = function(){
$(".DTTT_container").show("fast");
$("#header_outer").show("fast");
$(".ColVis.TableTools").show("fast");
$("#footer").show("fast");
};
iframe.contentWindow.document.body.appendChild(clonedDive);
iframe.contentWindow.print();
document.body.removeChild(iframe);
}
我在这条线得到一个错误:
iframe.contentWindow.document.body.appendChild(clonedDive);
这是一个错误的描述:
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
getElementsByClassName
得到一个节点列表,或包含元素,如果你会,因为有可能用相同的类多于一个元素的数组状物体。
getElementsByClassName
做到这一点,即使只有一个元素的类相匹配。
你通常可以识别这样的方法是s
中getElements
,这意味着它得到多个元素,即节点列表。
getElementById
只得到一个元素的ID是唯一的。
为了得到第一个元素的节点列表,使用括号标记,就像这样:
document.getElementsByClassName("div_name")[0].cloneNode(true);
或人们可以使用querySelector
,它获取所述第一匹配元件仅
document.querySelector(".div_name").cloneNode(true);
jQuery的解决办法是:
$('.div_name').clone(true);
并通过元素迭代具有一定的类名,你会使用一个循环
var elems = document.getElementsByClassName("div_name");
for ( var i=0; i<elems.length; i++ ) {
printHTML( elems[i].cloneNode(true) );
}
由于getElementsByClassName方法返回一个对象的数组,所以你必须使用for循环当中迭代,如下所示:
for (i = 0; i < document.getElementsByClassName("div_name").length; i++){
printHTML( document.getElementsByClassName("div_name")[i].cloneNode(true));
}
否则,如果你知道元素的索引你让我们说1
printHTML( document.getElementsByClassName("div_name")[1].cloneNode(true));
这不起作用? :
printHTML( document.getElementsByClassName("class_name")[0].cloneNode(true));
你可以通过元素循环和克隆一个接一个......
var e = document.getElementsByClassName('div');
for (var i = 0; i < e.length; i += 1) {
// Clone e[i] here
console.log(e[i].cloneNode(true));
}