DOM要素を最初の子として設定する方法は?


243

要素Eがあり、それにいくつかの要素を追加しています。突然、次の要素はEの最初の子であることがわかりました。トリックは何ですか、どのように行うのですか?Eは配列ではなくオブジェクトであるため、メソッドunshiftは機能しません。

長い道のりはEの子供たちを繰り返し、key ++を移動することですが、もっときれいな方法があると私は確信しています。


1
君たちは速い!すみません、誤解されていたようです。要素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
参考までに、親に要素がない場合、とにかく子が追加されます。
クヌ14

firstChildがテキストの場合、ノードは例外をスローします。しかし、jqueryは付加しません。
Sergey Sahakyan 2016年

3
@Sergey、テキストノードでも動作し、FirefoxとChromiumでテストされています。どのブラウザを使用しましたか?問題はあなた側ではなかったと思いますか?問題を再現するスニペット/ jsfiddleを準備しますか?
ユーザーの

list.outerHTML = entry.outerHTML + list.outerHTML; 希望は誰かを助けます。
Deniz Porsuk

106

2017バージョン

使用できます

targetElement.insertAdjacentElement('afterbegin', newFirstElement)

MDNから:

insertAdjacentElement()メソッドは、特定の要素ノードを、それが呼び出された要素に相対的な特定の位置に挿入します。

位置
要素の相対位置を表すAのDOMString。次の文字列のいずれかである必要があります::
beforebegin要素自体の前。
afterbegin:要素のすぐ内側、最初の子の前。
beforeend:最後の子の後の要素のすぐ内側。
afterend:要素自体の後。

element
ツリーに挿入される要素。

また、ファミリーinsertAdjacentには兄弟メソッドがあります:

element.insertAdjacentHTML('afterbegin','htmlText')innerHTMLすべてを上書きせずに、HTML文字列を直接挿入するため、抑圧的なプロセスにジャンプdocument.createElementして、文字列操作プロセスでコンポーネント全体を構築することもできます

element.insertAdjacentText要素にサニタイズ文字列を挿入します。もういやencode/decode


2
素晴らしい提案ですが、なぜ「2017年に戻る」のか、これはie8でも標準的な方法です
Vitaliy Terziev

ありがとう。そしてもう一つはあなたの洞察に感謝します。タイトルは人々がすぐに区別できるようにするためのもので、これが新しい答えです
ペリーミモン

element = document.importNode(documentfragment、true)の場合はどうなりますか?
マーティン・ミーザー2018

を持たないelementtypeof を返しdocument-fragmentますinsertAdjacent...()。より適切な回答が得られるまでは、fragmentをに追加するのが最善の推測ですdiv。あなたのDOMの操作を行ってから使用Range.selectNodeContents()してRange.extractContents()フラグメントを取り戻すために
ペリーmimon

ここで、「element」は追加する要素、「element」は追加する要素です;)
bokkie

95

2018バージョン

parentElement.prepend(newFirstChild)

これは最新のJSです。以前のオプションよりも読みやすくなっています。現在、Chrome、FF、Operaで利用できます。

PSあなたは直接文字列を付加することができます

parentElement.prepend('This text!')

developer.mozilla.org

使用できます -2020年5月94%

ポリフィル


6
素晴らしい解決策、ありがとう!彼らが子供を最後に追加することを決定したのは不思議ですが、子供を.appendChild()最初に追加することは.prepend()慣習に固執してそれを呼び出すのではなく.prependChild()
Marquizzo

1
append()も存在し、と同じように機能prepend()しますが、最後に
-Gibolt

1
また、実装についての質問がprependすでにあるのに気づいたときにも混乱しました。:( [OK]を、それは過去に存在しなかった。
リック・

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 2017年

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の拡張機能を書いているので、パフォーマンス上の理由でできる限りネイティブバージョンを使用しますが、これは完璧です!
テイラーエヴァンソン2014

Na、彼はjqueryではなくJavaScriptを探しています。
Vinyll

2

jQueryで.prepend関数を探していると思います。コード例:

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

君たちは速い!すみません、誤解されていたようです。要素e |-child-el_1 |-child-el_2 |-child-el_3次に、最初の子としてフィットする必要があるchild-el_4 ...が追加されます。prependはchild-el_4を[b] e [/ b]の前に置きます、私は間違っていて疲れていますか?
ポパラ

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.