Bagaimana saya bisa menerapkan prepend dan tambahkan dengan JavaScript biasa?

150

Bagaimana saya bisa menerapkan prepend dan tambahkan dengan JavaScript biasa tanpa menggunakan jQuery?

Yosef
sumber
1
Saya tidak mengerti maksud Anda.
Pekka
@GenericTypeTea: Begitu juga saya di waktu yang sama ... Saya akan membiarkannya sekarang!
Mark Byers
@ Mark - Hasil edit Anda lebih baik :).
djdd87

Jawaban:

147

Mungkin Anda bertanya tentang metode DOM appendChild dan insertBefore.

parentNode.insertBefore(newChild, refChild)

Menyisipkan simpul newChildsebagai anak parentNodesebelum simpul anak yang ada refChild. (Pengembalian newChild.)

Jika refChildnol, newChildditambahkan di akhir daftar anak-anak. Sama, dan lebih mudah dibaca, gunakan parentNode.appendChild(newChild).

Grumdrig
sumber
7
jadi pada dasarnya beginifunction prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
Muhammad Umer
166

Berikut cuplikan untuk membuat Anda maju:

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.firstChildakan memberi kita referensi ke elemen pertama di dalam theParentdan meletakkannya theKidsebelumnya.

Menepuk
sumber
Terima kasih, mengapa untuk sebelumnya hanya menggunakan insertBefore tanpa membuat div tambahan? suka jawaban Grumdrig?
Yosef
ini menciptakan elemen dan menambahkannya ke dom, menambahkan, dan menambahkan kerja berbeda
Andrei Cristian Prodan
Saya mendapatkan yang ini dibandingkan dengan jawaban Grumdig
andrew
10
Ini tahun 2015. Bisakah kita memiliki prepend()metode bawaan?
1,21 gigawatt
Node.append atau node.appendChild adalah metode batal, gunakan insertBefore (node, null) sebagai gantinya
Suhayb
28

Anda tidak memberi kami banyak hal untuk dilanjutkan di sini, tapi saya pikir Anda hanya bertanya bagaimana cara menambahkan konten ke awal atau akhir suatu elemen? Jika demikian, inilah cara Anda dapat melakukannya dengan mudah:

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

Sangat mudah.

Munzilla
sumber
Bagus, hanya apa yang saya cari.
Andrei Cristian Prodan
2
@Munzilla Metode ini akan memaksa browser untuk mem-parsing semua anak yang ada lagi. Dalam solusi di atas Browser hanya perlu melampirkan anak yang diberikan ke dokumen.
Sayam Qazi
12

Jika Anda ingin memasukkan string HTML mentah tidak peduli seberapa kompleksnya, Anda dapat menggunakan insertAdjacentHTML:, dengan argumen pertama yang sesuai:

'beforebegin' Sebelum elemen itu sendiri. 'afterbegin' Tepat di dalam elemen, sebelum anak pertamanya. 'sebelum akhir' Tepat di dalam elemen, setelah anak terakhirnya. 'afterend' Setelah elemen itu sendiri.

Petunjuk: Anda selalu dapat menelepon Element.outerHTMLuntuk mendapatkan string HTML yang mewakili elemen yang akan dimasukkan.

Contoh penggunaan:

document.getElementById("foo").insertAdjacentHTML("beforeBegin",
          "<div><h1>I</h1><h2>was</h2><h3>inserted</h3></div>");

DEMO

Perhatian: insertAdjacentHTML tidak melindungi pendengar yang terlampir .addEventLisntener.

artur grzesiak
sumber
" insertAdjacentHTMLTidak melindungi pendengar ..." Pendengar apa? Ini HTML, jadi belum ada elemen yang diikat. Jika Anda merujuk ke elemen yang ada di dalam foo, maka itu bukan pernyataan yang benar. Intinya .insertAdjacentHTMLadalah bahwa hal itu melestarikan pendengar. Anda mungkin berpikir .innerHTML += "...", yang menghancurkan node DOM lama.
spanky
@spanky Anda benar bahwa pernyataan dapat ditafsirkan dalam berbagai cara, yang sebenarnya saya maksudkan adalah simpul DOM yang baru dibuat dengan insertAdjacentHTML(bukan root maupun keturunan root yang ada)
artur grzesiak
6

Saya menambahkan ini pada proyek saya dan sepertinya berhasil:

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]);
    }
};

Contoh:

document.body.prependHtml(`<a href="#">Hello World</a>`);
document.body.appendHtml(`<a href="#">Hello World</a>`);
Raza
sumber
5

Untuk menyederhanakan hidup Anda, Anda dapat memperpanjang HTMLElementobjek. Ini mungkin tidak berfungsi untuk peramban yang lebih lama, tetapi jelas membuat hidup Anda lebih mudah:

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

Jadi lain kali Anda dapat melakukan ini:

document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);
moka
sumber
1
bagaimana jika simpul tidak memiliki simpul anak? Dalam hal ini firstChild akan menjadi null
felixfbecker 12-15
prepend sudah ada, lihat ParentNode.prepend (), jadi untuk membuat prependChild, cukup dengan memanggil prnt.prepend (chld)
Igor Fomenko
2

Berikut adalah contoh penggunaan prepend untuk menambahkan paragraf ke dokumen.

var element = document.createElement("p");
var text = document.createTextNode("Example text");
element.appendChild(text);
document.body.prepend(element);

hasil:

<p>Example text</p>
JamesH
sumber
1

Pada 2017 saya tahu untuk Edge 15 dan IE 12, metode prepend tidak termasuk sebagai properti untuk elemen Div, tetapi jika ada yang membutuhkan referensi cepat ke polyfill fungsi saya membuat ini:

 HTMLDivElement.prototype.prepend = (node, ele)=>{ 
               try { node.insertBefore(ele ,node.children[0]);} 
                     catch (e){ throw new Error(e.toString()) } }

Fungsi panah sederhana yang kompatibel dengan sebagian besar browser modern.

akiespenc
sumber
0
var insertedElement = parentElement.insertBefore(newElement, referenceElement);

Jika referenceElement adalah nol, atau tidak terdefinisi, newElement dimasukkan pada akhir daftar node anak.

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.

Contohnya dapat ditemukan di sini: Node.insertBefore

b3wii
sumber
0

Anda juga dapat menggunakan unshift () untuk menambahkan ke daftar

Steve Freed
sumber
-1

Ini bukan cara terbaik untuk melakukannya tetapi jika ada yang ingin memasukkan elemen sebelum semuanya, ini caranya.

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);
Güven Altuntaş
sumber