回答:
使用して、insertAdjacentHTML
それが利用可能だと、そうでない場合は、フォールバックのいくつかの並べ替えを使用します。insertAdjacentHTML は、現在のすべてのブラウザでサポートされています。
div.insertAdjacentHTML( 'beforeend', str );
ライブデモ: http : //jsfiddle.net/euQ5n/
insertAdjacentHTML
はに追加するよりも高速です。innerHTML
insertAdjacentHTML
insertAdjacentHTML
変更されたフォーム要素の値を維持しますinnerHTML
が、要素を再構築して追加すると、すべてのフォームコンテキストが失われます。
これは受け入れられますか?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
しかし、ニールの答えはより良い解決策です。
innerHTML
か?
insertAdjacentHTML
。
AppendChild
(E)はchromeおよびsafariの他のソリューションよりも2倍以上高速insertAdjacentHTML
です。(F)はFirefoxで最も高速です。innerHTML=
(B)(でない混同ん+=
)A()は、すべてのブラウザ上の第二高速なソリューションであり、EとFのよりもはるかに便利です
セットアップ環境(2019.07.10)MacOs High Sierra 10.13.4 on Chrome 75.0.3770(64-bit)、Safari 11.1.0(13604.5.6)、Firefox 67.0.0(64-bit)
アイデアはinnerHTML
、中間要素で使用し、その子ノードのすべてを、を介して実際に必要な場所に移動することですappendChild
。
var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';
var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
target.appendChild(temp.firstChild);
}
これにより、イベントハンドラーdiv#test
が消去されるのを回避しながら、HTMLの文字列を追加できます。
正しい方法はを使用することinsertAdjacentHTML
です。8より前のFirefoxでは、タグが含まれていないRange.createContextualFragment
場合は、使用にフォールバックできます。str
script
タグstr
が含まれている場合は、フラグメントを挿入する前に、によって返されたフラグメントから要素script
を削除する必要があります。それ以外の場合、スクリプトは実行されます。(スクリプトを実行不可としてマークします。)script
createContextualFragment
insertAdjacentHTML
createContextualFragment
。ユーザーがCookieを設定することに同意した場合にのみスクリプトを実行してHTMLインクルードを作成する方法を探していました。
クイックハック:
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
ユースケース:
1:.htmlファイルとして保存し、Chrome、Firefox、またはEdgeで実行します。(IEは動作しません)
2:http://js.doで使用
実行中: http : //js.do/HeavyMetalCookies/quick_hack
コメントで分解:
<script>
//: The message "QUICK_HACK"
//: wrapped in a header #1 tag.
var text = "<h1>QUICK_HACK</h1>";
//: It's a quick hack, so I don't
//: care where it goes on the document,
//: just as long as I can see it.
//: Since I am doing this quick hack in
//: an empty file or scratchpad,
//: it should be visible.
var child = document.children[0];
//: Set the html content of your child
//: to the message you want to see on screen.
child.innerHTML = text;
</script>
私が投稿した理由:
JS.doには2つの必須項目があります。
ただし、console.logメッセージは表示されません。迅速な解決策を探してここに来ました。ほんの数行のスクラッチパッドコードの結果を確認したいだけですが、他の解決策はあまりにも働きすぎです。
それはなぜ受け入れられないのですか?
document.getElementById('test').innerHTML += str
それを行うための教科書的な方法でしょう。
#test
かかわらを。それは一般的に望ましくありません。
これで解決できます
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTMLは既存のノードのイベントのようなすべてのデータをクリアします
firstChildで子を追加すると、innerHTMLに最初の子のみが追加されます。たとえば、追加する必要がある場合:
<p>text1</p><p>text2</p>
text1のみが表示されます
これはどうですか:
子を追加してinnerHTMLに特別なタグを追加し、作成したタグを削除してouterHTMLを編集します。それがどれほど賢いかわからないがそれは私にとってはうまくいくか、関数replaceを使用する必要がないので、outerHTMLをinnerHTMLに変更するかもしれない
function append(element, str)
{
var child = document.createElement('someshittyuniquetag');
child.innerHTML = str;
element.appendChild(child);
child.outerHTML = child.outerHTML.replace(/<\/?someshittyuniquetag>/, '');
// or Even child.outerHTML = child.innerHTML
}
<div id="testit">
This text is inside the div
<button onclick="append(document.getElementById('testit'), '<button>dadasasdas</button>')">To div</button>
<button onclick="append(this, 'some text')">to this</button>
</div>
innerHTML
文字列を要素に入れます(すべての子を置き換えます)一方insertAdjacentHTML
で、(1)要素の前、(2)要素の後、(3)最初の子の前の要素内、または(4)最後の子の後の要素内。