Wie füge ich als erstes Kind ein Element ein?


95

Ich möchte bei jedem Klick auf eine Schaltfläche mit jquery ein div als erstes Element hinzufügen

<div id='parent-div'>
    <!--insert element as a first child here ...-->

    <div class='child-div'>some text</div>
    <div class='child-div'>some text</div>
    <div class='child-div'>some text</div>

</div> 

Die Antworten auf diese Frage funktionieren auch mit einer leeren Liste von untergeordneten Elementen. Toll!
Roland

Antworten:


161

Probieren Sie die $.prepend()Funktion aus.

Verwendung

$("#parent-div").prepend("<div class='child-div'>some text</div>");

Demo

var i = 0;
$(document).ready(function () {
    $('.add').on('click', function (event) {
        var html = "<div class='child-div'>some text " + i++ + "</div>";
        $("#parent-div").prepend(html);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="parent-div">
    <div>Hello World</div>
</div>
<input type="button" value="add" class="add" />


Das Problem bei dieser Lösung besteht darin, dass sie als erstes untergeordnetes Element und nicht vor der untergeordneten Liste eingefügt wird. Wenn der übergeordnete Container verschiedene untergeordnete Elemente enthält und vor einer bestimmten Gruppe von untergeordneten Knoten eingefügt werden soll, funktioniert dies nicht.
Aurovrata

Anfangs war mir nicht klar, dass diese Lösung auch funktioniert, wenn es keine untergeordneten Elemente gibt. prepend () wird in die leere Liste eingefügt und das erste untergeordnete div-Element erstellt. Natürlich funktioniert append () auch, aber die Liste wird in einer anderen Reihenfolge erstellt.
Roland

17

In Anbetracht dessen, was @vabhatia gesagt hat, ist dies das, was Sie in nativem JavaScript (ohne JQuery) wollen.

ParentNode.insertBefore(<your element>, ParentNode.firstChild);



5
parentNode.insertBefore(newChild, refChild)

Fügt den Knoten newChild als untergeordnetes Element von parentNode vor dem vorhandenen untergeordneten Knoten refChild ein. (Gibt newChild zurück.)

Wenn refChild null ist, wird newChild am Ende der Liste der untergeordneten Elemente hinzugefügt. Verwenden Sie gleichwertig und besser lesbar parentNode.appendChild (newChild).


buchstäblich kopieren und aus einem anderen Beitrag einfügen. vielleicht auf die spezifische Frage verweisen und wie sie sich bezieht?
Roberthuttinger

1
parentElement.prepend(newFirstChild);

Dies ist eine neue Ergänzung in (wahrscheinlich) ES7. Es ist jetzt Vanilla JS, wahrscheinlich aufgrund der Popularität in jQuery. Es ist derzeit in Chrome, FF und Opera verfügbar. Transpiler sollten in der Lage sein, damit umzugehen, bis es überall verfügbar ist.

PS Sie können Zeichenfolgen direkt voranstellen

parentElement.prepend('This text!');

Links: developer.mozilla.org - Polyfill


0

Hier erforderlich

<div class="outer">Outer Text <div class="inner"> Inner Text</div> </div>

hinzugefügt von

$(document).ready(function(){ $('.inner').prepend('<div class="middle">New Text Middle</div>'); });



-1
$('.parent-div').children(':first').before("<div class='child-div'>some text</div>");

Dies wird vor jedem Kind eingefügt, dh Sie werden am Ende mehrere Knoten einfügen.
Aurovrata
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.