3

getElementByIddiv要素のクローンを作成する必要があるときに使用しています。

コード:

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同じクラスの要素が複数存在する可能性があるため、ノードリスト、または必要に応じて要素を含む配列のようなオブジェクトを取得します。

getElementsByClassName1つの要素だけがクラスに一致する場合でも、これを行います。
一般に、そのようなメソッドはsingetElementsであると認識できます。これは、複数の要素、つまりnodeListを取得することを意味します。

getElementByIdIDは一意であるため、1つの要素のみを取得します。

ノードリストの最初の要素を取得するには、次のように角かっこ表記を使用します。

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

要素をループして、1つずつクローンを作成できます...

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 に答える