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;
Ricky

답변:


160

이것을 시도하십시오 :-

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.appendChild는 변경하는 대신 방법 을 사용해야 합니다innerHTML

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
브라우저가 'something'문자열을 구문 분석해야하고 큰 페이지에서 많은 시간이 걸리기 때문에 document.body.innerHTML = 'something'을 수행하면 불필요한 계산이 많이 발생한다는 점을 고려해야합니다. 훨씬 더 효과적인 접근 방식은 새 요소를 작성하여 DOM에 첨부하는 것입니다. jsperf에서이 비교를 확인하십시오 : jsperf.com/innerhtml-vs-appendchild2
fegemo

14
이 접근법은 원치 않는 부작용도 있습니다. 예를 들어, innerHTML새로 설정하면 하위 요소에 대한 모든 바운드 이벤트가 언 바운드됩니다 .
anoopelias

5
이것은 분명히 잘못된 대답입니다 ... 질문은 전체 페이지를 다시 쓰지 않고 요소를 추가하는 것에 대해 묻습니다. 더 나은 대안은 JPH를 참조하십시오.
Christian

4
-1. 이것은 이것을 달성하는 끔찍한 방법입니다. 이 내용을 읽고 있다면이 느리고 날짜가 지난 솔루션을 사용하지 마십시오. @ peter-t의 답변을보십시오
MacroMan

3
이 속도는 느릴뿐만 아니라 이전 요소를 파괴하므로 페이지에 연결된 이벤트 리스너가 손실됩니다! 모든 비용을 지불하지 마십시오. 대신 appendChild를 사용하십시오.
크 랜티 키란 P

223

자바 스크립트 사용

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
가장 이상한 것. 최악의 경우 순수한 자바 스크립트는 항상 내가하고 싶은 일을하는 길이었습니다.
스펜서 윌리엄스

3
이것이 정답입니다. 이것이 올바른 방법으로 진행되는 유일한 대답입니다.
MacroMan

@MacroMan jquery 버전이라도? jquery를 사용하고 있으며 올바르게 그렇게하고 싶습니다. (그의 jquery 답변이 한
줄이고

@felwithe jQuery 버전은 수용 가능하지만 코드를 더 명확하게하려면 노드를 처음부터 작성하고 스타일을 개별적으로 적용 할 수 있습니다.
MacroMan

appendChild()insertBefore()요소의 위치에 더 많은 유연성을 제공가 삽입되는
averasko


12

모든 솔루션을 한 곳에 모아 @Peter T의 포스트를 개선합니다.

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}";
}

사용 XPath은 DOM 트리에서 요소의 위치를 찾을 수와 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;

가장 쉽고 쉬운 방법. 감사!
Muhammad 알리

1

현대적인 방법은 ParentNode.append()다음과 같이 사용하는 것입니다.

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


0

가장 좋은 방법은 요소를 만들어 body태그에 추가하는 것 입니다. 두 번째 방법은 먼저 innerHTML속성을 가져와 body코드를 추가하는 것입니다. 예를 들면 다음과 같습니다.

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

3
첫째, 단순히 document.body앞서 언급했듯이 단순히 요소를 추가하기 위해 전체 페이지를 다시 쓰지 말고 페이지 본문에 갈 수 있습니다 .
Christian

-2

정말 빠른 트릭이 있습니다 : div 태그 안에 p 태그를 추가하고 싶다고합시다.

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

그리고 그게 다야.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.