DOM 요소를 첫 번째 자식으로 설정하는 방법은 무엇입니까?


243

나는 요소 E를 가지고 있으며 그것에 요소를 추가하고 있습니다. 갑자기 다음 요소가 E의 첫 번째 자식이어야한다는 것을 알게되었습니다. 어떻게해야합니까? E는 배열이 아닌 객체이므로 메서드 unshift가 작동하지 않습니다.

트로프 E의 아이들을 반복하고 키 ++로 옮기는 것이 먼 길이지만, 더 예쁜 방법이 있다고 확신합니다.


1
너희들은 빠르다! 죄송합니다. 제가 오해 한 것 같습니다. element e |-child-el_1 |-child-el_2 |-child-el_3 그리고 child-el_4가옵니다. 첫 번째 자식으로 적합해야합니다. prepend는 child-el_4를 [b] e [/ b] 앞에 두었습니다. 제가 잘못하고 피곤합니까?
Popara

답변:


472
var eElement; // some E DOM instance
var newFirstElement; //element which should be first in E

eElement.insertBefore(newFirstElement, eElement.firstChild);

3
당신은 내 친구, 방금 당신에게 자기 곰을 얻었다! 유용한 추가 결과. docs.jquery.com/Manipulation/insertBefore
Popara

79
부모에게 요소가 없으면 정보는 어쨌든 추가됩니다.
Knu

firstChild의 경우 텍스트 노드에서 예외가 발생합니다. 그러나 jquery는 dousn을 사용하지 않습니다.
Sergey Sahakyan

3
@Sergey, Firefox 및 Chromium에서 테스트 한 텍스트 노드에서도 작동합니다. 어떤 브라우저를 사용하셨습니까? 문제가 당신 편이 아니 었습니까? 문제를 재현하는 스 니펫 / jsfiddle을 준비 하시겠습니까?
사용자

list.outerHTML = entry.outerHTML + list.outerHTML; 희망은 누군가를 돕는다.
Deniz Porsuk

106

2017 년판

당신이 사용할 수있는

targetElement.insertAdjacentElement('afterbegin', newFirstElement)

에서 MDN :

insertAdjacentElement () 메소드는 호출 된 요소를 기준으로 지정된 위치에 지정된 요소 노드를 삽입합니다.

position
요소와 관련된 위치를 나타내는 DOMString; 다음 문자열 중 하나 여야합니다.
beforebegin: 요소 자체 앞.
afterbegin: 첫 번째 자식 앞에 요소 내부.
beforeend: 마지막 자식 이후 요소 내부.
afterend: 요소 자체 뒤.

element
트리에 삽입 할 요소입니다.

또한 가족 계열 insertAdjacent에는 형제 방법이 있습니다.

element.insertAdjacentHTML('afterbegin','htmlText')innerHTML모든 것을 무시하지 않고 html 문자열을 직접 주입 하므로 압제 적 인 과정을 뛰어 넘고 document.createElement문자열 조작 과정으로 전체 구성 요소를 만들 수도 있습니다

element.insertAdjacentText살균 문자열을 element에 주입하십시오. 더 이상은 없어encode/decode


2
큰 제안이지만 "2017 년으로 돌아가는"이유는 ie8에서도 표준 방법입니다.
Vitaliy Terziev

감사. 통찰력에 감사드립니다. 제목은 사람들이 새로운 대답은 그 신속하게 구별 돕는 것입니다
pery을 미몬

element = document.importNode (documentfragment, true)이면 어떻게됩니까?
Martin Meeser

반환이 element대해서 typeof document-fragment이없는 것으로는 insertAdjacent...(). 우리가 더 나은 답변을 얻을 때까지 가장 좋은 추측은에를 추가 fragment하는 것 div입니다. 당신의 돔 조작을 한 다음 사용 Range.selectNodeContents()하고 Range.extractContents()조각을
되찾기

여기서 'element'는 추가하려는 요소이고 'element'는 추가하려는 요소입니다.)
bokkie

96

2018 버전

parentElement.prepend(newFirstChild)

이것은 현대 JS입니다! 이전 옵션보다 더 읽기 쉽습니다. 현재 Chrome, FF 및 Opera에서 사용할 수 있습니다.

추신 : 당신은 직접 문자열을 선행 할 수 있습니다

parentElement.prepend('This text!')

developer.mozilla.org

사용 가능 -2020 년 5 월 94 %

폴리 필


6
훌륭한 솔루션, 감사합니다! 아이를 마지막에 추가하기로 결정했다고 .appendChild()말하지만, 처음에 추가하는 것은 .prepend()컨벤션을 고수하는 것이 아니라 전화하는 것입니다..prependChild()
Marquizzo

1
append()또한 존재 prepend()하지만, 같은 방식으로 작동 하지만 결국
Gibolt

1
나는 prepend이미 그 사실을 발견하면서 구현에 관해 묻는 질문을 보았을 때 혼란스러워 했습니다. :( 좋아, 과거에는 존재하지 않았다.
Rick

10

모든 창 HTML 요소에서 직접 구현할 수 있습니다.
이처럼 :

HTMLElement.prototype.appendFirst=function(childNode){
    if(this.firstChild)this.insertBefore(childNode,this.firstChild);
    else this.appendChild(childNode);
};

prepend프로토 타입이 필요없는 바닐라 JS와 동일합니다. ES7에서는 표준이되며 가능한 경우 응용 프로그램에 사용해야합니다
Gibolt

6

수락 된 답변은 함수로 리팩토링되었습니다.

function prependChild(parentEle, newFirstChildEle) {
    parentEle.insertBefore(newFirstChildEle, parentEle.firstChild)
}

부모-자식 관계를 사용하기위한 +1 받아 들여진 대답에는 부족합니다. eElement이해하기 위해서는 무엇이 필요한지 알아야합니다 . 이를 위해서는 질문을 읽어야합니다. 대부분의 경우 제목을 확인하고 질문 세부 사항을 무시하고 답변으로 바로 이동합니다.
akinuri

4

내가 오해하지 않는 한 :

$("e").prepend("<yourelem>Text</yourelem>");

또는

$("<yourelem>Text</yourelem>").prependTo("e");

설명에서 어떤 조건이 첨부되어있는 것처럼 들리므로

if (SomeCondition){
    $("e").prepend("<yourelem>Text</yourelem>");
}
else{
    $("e").append("<yourelem>Text</yourelem>");
}

$ 버전의 경우 +1! jQuery extend func를 작성하고 있으므로 성능상의 이유로 가능한 한 기본 버전을 사용하지만 완벽합니다!
Taylor Evanson

그는 jquery가 아닌 JavaScript를 찾고 있습니다.
vinyll

2

jQuery 에서 .prepend 함수를 찾고 있다고 생각합니다 . 예제 코드 :

$("#E").prepend("<p>Code goes here, yo!</p>");

너희들은 빠르다! 죄송합니다. 제가 오해 한 것 같습니다. element e |-child-el_1 |-child-el_2 |-child-el_3 그리고 child-el_4가옵니다. 첫 번째 자식으로 적합해야합니다. prepend는 child-el_4를 [b] e [/ b] 앞에 두었습니다. 제가 잘못하고 피곤합니까?
Popara

0

이 프로토 타입을 만들어 요소를 부모 요소 앞에 추가했습니다.

Node.prototype.prependChild = function (child: Node) {
    this.insertBefore(child, this.firstChild);
    return this;
};

0
var newItem = document.createElement("LI");       // Create a <li> node
var textnode = document.createTextNode("Water");  // Create a text node
newItem.appendChild(textnode);                    // Append the text to <li>

var list = document.getElementById("myList");    // Get the <ul> element to insert a new node
list.insertBefore(newItem, list.childNodes[0]);  // Insert <li> before the first child of <ul>

https://www.w3schools.com/jsref/met_node_insertbefore.asp

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