次の違いは何ですか?
var div = document.createElement('div');//output -> [object HTMLDivElement]
document.getElementById('container').appendChild(div);
そして:
var div = '<div></div>';
document.getElementById('container').appendChild(div);//output -> <div></div>
両方が同じであるべきではありませんか?そうでない場合、どうすれば2番目のバージョンを機能させることができますか?
後者はHTMLを含む単なる文字列ですが、最初の文字列はオブジェクトです。最初の場合はappendChild
が必要ですが、2番目の場合はinnerHTML
に追加する必要があります。
両方が同じであってはいけませんか?そうでない場合、どのように2番目のバージョンを動作させるのですか?
var div = '<div></div>';
document.getElementById('container').innerHTML += div;
JS/DOMエンジンで、string
を引数としてElement.appendChild
を呼び出すと、新しいText
ノードが作成され、追加されます。
最初の例では、<div>
要素を作成します。 2番目の例では、<div></div>
を内容として持つテキストノードを作成します。
2番目の例は次と同等です。
var div = '<div></div>';
document.getElementById('container').appendChild(document.createTextNode(div));//output -> <div></div>
Sarfraz Ahmedが彼の答えで言及した のように、2番目の例は、次のように書くことで、希望どおりに動作させることができます。
var div = '<div></div>';
document.getElementById('container').innerHTML = div;
appendChild
は、文字列ではなく、HTMLDivElement
などのHTMLDomNodeを実際に期待しています。文字列の処理方法がわかりません。できる
document.getElementById('container').innerHTML += div;
しかし、私は本当に最初のバージョンを好みます。そして、ブラウザ間で同じ動作をするためにもっと頼りにしたいと思います。
appendChildは要素を予期しているため、テキストを送信するときに何をすべきかわかりません。 jQueryなど、その作業の一部を容易にするために、javascriptライブラリの使用を検討することをお勧めします。あなたのコードは次のようになります:
$('#container').append('<div></div>');
すべてのブラウザをサポートする最も簡単なソリューションは次のとおりです。
var div = '<div></div>';
var parser = new DOMParser();
var myDiv = parser.parseFromString( html, "text/xml" );
別の解決策は次のとおりです。
var div = '<div></div>';
var tmpDiv = document.createElement('div');
tmpDiv.innerHTML = div;
elDiv = tmpDiv.childNodes[0]; //Now it can be used as an element
これらを使用して、要素をDOMにそれぞれ追加/追加することもできます。
var elem = document.documentElement.appendChild(document.createElement(element));
var elem = document.documentElement.prepend(document.createElement(element));
elem
変数を使用して要素をターゲットにします(例):
elem.style.display = "block";
elem.style.remove();
elem.style.id = ...;
等.