답변:
아마도 당신은 DOM 메소드 appendChild
와 에 대해 묻고 insertBefore
있습니다.
parentNode.insertBefore(newChild, refChild)
기존 자식 노드 이전의
newChild
자식으로 노드 를 삽입parentNode
합니다refChild
. (을 반환합니다newChild
.)
refChild
null 인 경우newChild
자식 목록 끝에 추가됩니다. 동등하게 그리고 더 읽기 쉽게를 사용하십시오parentNode.appendChild(newChild)
.
function prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
다음은 스 니펫입니다.
theParent = document.getElementById("theParent");
theKid = document.createElement("div");
theKid.innerHTML = 'Are we there yet?';
// append theKid to the end of theParent
theParent.appendChild(theKid);
// prepend theKid to the beginning of theParent
theParent.insertBefore(theKid, theParent.firstChild);
theParent.firstChild
우리에게 내 첫 번째 요소에 대한 참조를 줄 것이다 theParent
넣어 theKid
그것을하기 전에.
prepend()
아직 내장 방법을 사용할 수 있습니까 ?
우리는 여기서 많은 것을주지 않았지만 요소의 시작이나 끝에 내용을 추가하는 방법을 묻는 것 같아요? 그렇다면 다음과 같이하면 쉽게 할 수 있습니다.
//get the target div you want to append/prepend to
var someDiv = document.getElementById("targetDiv");
//append text
someDiv.innerHTML += "Add this text to the end";
//prepend text
someDiv.innerHTML = "Add this text to the beginning" + someDiv.innerHTML;
아주 쉽습니다.
아무리 복잡하더라도 원시 HTML 문자열을 삽입하려면 insertAdjacentHTML
적절한 첫 번째 인수와 함께 다음을 사용할 수 있습니다
.
'before begin' 요소 자체 앞에. 'afterbegin' 첫 번째 자식 앞에 요소 내부에 있습니다. 'beforeend' 마지막 자식 다음에 요소 내부에 있습니다. 'afterend' 요소 자체 이후.
힌트 : Element.outerHTML
삽입 할 요소를 나타내는 HTML 문자열을 얻기 위해 항상 호출 할 수 있습니다.
사용 예 :
document.getElementById("foo").insertAdjacentHTML("beforeBegin",
"<div><h1>I</h1><h2>was</h2><h3>inserted</h3></div>");
주의 : insertAdjacentHTML
로 첨부 된 청취자를 보존하지 마십시오 .addEventLisntener
.
insertAdjacentHTML
청취자를 보존하지 않습니다 ..." 어떤 청취자? HTML이므로 아직 바인딩 할 요소가 없습니다. 내부의 기존 요소를 언급했다면 foo
이는 사실이 아닙니다. 요점은 청취자를 보존.insertAdjacentHTML
한다는 것 입니다. 아마도 이전 DOM 노드를 파괴하는을 생각하고있을 것 입니다. .innerHTML += "..."
insertAdjacentHTML
(루트 나 루트의 기존 자손이
내 프로젝트에 이것을 추가했는데 작동하는 것 같습니다.
HTMLElement.prototype.prependHtml = function (element) {
const div = document.createElement('div');
div.innerHTML = element;
this.insertBefore(div, this.firstChild);
};
HTMLElement.prototype.appendHtml = function (element) {
const div = document.createElement('div');
div.innerHTML = element;
while (div.children.length > 0) {
this.appendChild(div.children[0]);
}
};
예:
document.body.prependHtml(`<a href="#">Hello World</a>`);
document.body.appendHtml(`<a href="#">Hello World</a>`);
인생을 단순화하기 위해 HTMLElement
개체를 확장 할 수 있습니다 . 구형 브라우저에서는 작동하지 않을 수 있지만 확실히 인생을 더 편하게 만듭니다.
HTMLElement = typeof(HTMLElement) != 'undefined' ? HTMLElement : Element;
HTMLElement.prototype.prepend = function(element) {
if (this.firstChild) {
return this.insertBefore(element, this.firstChild);
} else {
return this.appendChild(element);
}
};
다음에이 작업을 수행 할 수 있습니다.
document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);
var insertedElement = parentElement.insertBefore(newElement, referenceElement);
referenceElement가 null이거나 정의되지 않은 경우 newElement는 자식 노드 목록의 끝에 삽입됩니다.
insertedElement The node being inserted, that is newElement
parentElement The parent of the newly inserted node.
newElement The node to insert.
referenceElement The node before which newElement is inserted.
예제는 다음에서 찾을 수 있습니다. Node.insertBefore
이것은 최선의 방법은 아니지만 누군가가 모든 것 앞에 요소를 삽입하려면 여기에 방법이 있습니다.
var newElement = document.createElement("div");
var element = document.getElementById("targetelement");
element.innerHTML = '<div style="display:none !important;"></div>' + element.innerHTML;
var referanceElement = element.children[0];
element.insertBefore(newElement,referanceElement);
element.removeChild(referanceElement);