Bagaimana saya bisa menerapkan prepend dan tambahkan dengan JavaScript biasa?


150

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


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).


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.


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.


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.


" 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>`);

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

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>

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.


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



-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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.