JavaScriptで本文またはドキュメントにdiv要素を追加する


139

純粋なJavaScriptでライトボックスを作成しています。そのためにオーバーレイを作成しています。このオーバーレイを本文に追加しますが、ページのコンテンツも保持します。私の現在のコードはオーバーレイdivを追加しますが、本文の現在のコンテンツも削除します。div要素を追加してコンテンツを本文に保持する方法は?

var el = document.getElementById('element');
var body = document.getElementsByTagName('body');
el.innerHTML = '<p><a id="clickme" href="#">Click me</a></p>';
document.getElementById('clickme').onclick = function (e) {
    e.preventDefault();
    document.body.innerHTML = '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';
}

4
次のように追加しようとしましたか:document.body.innerHTML = '<div style = "position:absolute; width:100%; height:100%; opacity:0.3; z-index:100; background:#000;" > </ div> '+ document.body.innerHTML;
リッキー

回答:


159

これを試してください:-

http://jsfiddle.net/adiioo7/vmfbA/

使用する

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';

の代わりに

document.body.innerHTML = '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';

編集:- 理想的にはbody.appendChildinnerHTML

var elem = document.createElement('div');
elem.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000';
document.body.appendChild(elem);

18
document.body.innerHTML = 'something'を実行すると、ブラウザが 'something'文字列を解析する必要があり、大きなページで多くの時間がかかるため、多くの不要な計算が発生することを考慮する必要があります。より高性能なアプローチは、新しい要素を作成してDOMにアタッチすることです。jsperfでこの比較を確認してください:jsperf.com/innerhtml-vs-appendchild2
fegemo

14
このアプローチには、いくつかの望ましくない副作用もあります。たとえば、innerHTML新しく設定すると、子要素のすべてのバインド済みイベントはバインド解除されます。
anoopelias 2015年

5
これは間違いの間違いです。質問は、ページ全体を書き換えるのではなく、要素を追加することを求めています。より良い代替案については、JPHを参照してください。
クリスチャン・

4
-1。これはこれを達成するためのひどい方法です。これを読んでいる場合は、この遅くて時代遅れのソリューションを使用しないでください。@ peter-tによる回答を
ご覧ください

3
これは遅いだけでなく、以前の要素を破壊するため、以前にページにアタッチされたイベントリスナーはすべて失われます。絶対にこれを行わないでください。代わりにappendChildを使用してください。
Kranthi Kiran P 2017

223

JavaScriptの使用

var elemDiv = document.createElement('div');
elemDiv.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;';
document.body.appendChild(elemDiv);

jQueryの使用

$('body').append('<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>');

2
奇妙なこと。私の最悪の場合、純粋なjavascriptはいつも私がやりたいことをする方法でした。
スペンサーウィリアムズ

3
これは受け入れられる答えになるはずです。これを正しい方法で行う唯一の答えです。
MacroMan 2017

@MacroMan jqueryバージョンでも?私はjqueryを使用していますが、その方法でも適切に実行したいと考えています。(彼のjqueryの回答が1行だけであり、ノードなどを作成していないように見えるので、確認してください。)
felwithe

@felwithe jQueryバージョンは許容されますが、コードをより明確にする必要がある場合は、ノードを最初から作成し、スタイルを個別に適用できます。
MacroMan、2018年

appendChild()そして、insertBefore()挿入される要素の位置に一層の柔軟性を与える
averasko

21

すべてをinnerHTMLで置き換える代わりに、以下を試してください。

document.body.appendChild(myExtraNode);


10
するだけで体に到達できることに注意してくださいdocument.body
クリスチャン

これはより良いソリューションです。
Abhishek Sinha

12

@Peter Tの投稿を改善するには、すべてのソリューションを1か所に集めます。

Element.insertAdjacentHTML()

function myFunction() {
    window.document.body.insertAdjacentHTML( 'afterbegin', '<div id="myID" style="color:blue;"> With some data...</div>' );
}
function addElement(){
    var elemDiv = document.createElement('div');
    elemDiv.style.cssText = 'width:100%;height:10%;background:rgb(192,192,192);';
    elemDiv.innerHTML = 'Added element with some data'; 
    window.document.body.insertBefore(elemDiv, window.document.body.firstChild);
    // document.body.appendChild(elemDiv); // appends last of that element
}
function addCSS() {
    window.document.getElementsByTagName("style")[0].innerHTML += ".mycss {text-align:center}";
}

XPathDOMツリー内の要素の位置を検索し、指定されたテキストを指定された位置にXPath_Elementに挿入します。ブラウザコンソールでこのコードを試してください。

function insertHTML_ByXPath( xpath, position, newElement) {
    var element = document.evaluate(xpath, window.document, null, 9, null ).singleNodeValue;
    element.insertAdjacentHTML(position, newElement);
    element.style='border:3px solid orange';
}

var xpath_DOMElement = '//*[@id="answer-33669996"]/table/tbody/tr[1]/td[2]/div';
var childHTML = '<div id="Yash">Hi My name is <B>\"YASHWANTH\"</B></div>';
var position = 'beforeend';
insertHTML_ByXPath(xpath_DOMElement, position, childHTML);

2

やってみる

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>'

2

divHTMLコードを作成し、body次のコードで(または任意の要素)に直接設定できます。

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;

最善かつ最も簡単な方法。ありがとう!
ムハンマドアリ


0

最良かつより良い方法は、要素を作成してbodyタグに追加することです。2番目の方法は、最初にのinnerHTMLプロパティを取得し、bodyそれにコードを追加することです。例えば:

var b = document.getElementsByTagName('body');
b.innerHTML = b.innerHTML + "Your code";

3
1つは、単純にを実行することでページの本文にアクセスできることdocument.body、もう1つは前述のように、要素を追加するためだけにページ全体を書き換えないことです。
クリスチャン

-2

ここに本当に簡単なトリックがあります:divタグ内にpタグを追加したいとしましょう。

<div>
<p><script>document.write(<variablename>)</script></p>
</div>

以上です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.