3

我在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 
4

4 回答 4

8

getElementsByClassName获取一个节点列表,或者如果您愿意,可以获取一个包含元素的类数组对象,因为同一个类可以有多个元素。

getElementsByClassName即使只有一个元素与该类匹配,也会这样做。
您通常可以识别sin之类的方法getElements,这意味着它获取多个元素,即 nodeList。

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) );
}
于 2012-12-17T12:59:14.923 回答
2

由于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));
于 2012-12-17T12:58:40.867 回答
1

这不行吗?:

printHTML( document.getElementsByClassName("class_name")[0].cloneNode(true));
于 2012-12-17T12:58:32.410 回答
0

您可以遍历元素并一一克隆...

var e = document.getElementsByClassName('div');
for (var i = 0; i < e.length; i += 1) {
    // Clone e[i] here
    console.log(e[i].cloneNode(true));
} 
于 2012-12-17T13:00:45.250 回答