Başa eklenen ve normal JavaScript ile nasıl ekleyebilirim?


Yanıtlar:


147

Belki soruyorsun DOM yöntemlerine appendChild ve insertBefore.

parentNode.insertBefore(newChild, refChild)

Düğümü , varolan alt düğümden önce newChildbir alt öğesi olarak eklerparentNoderefChild . (İade newChild.)

Eğer refChildnull, newChildçocukların listesinin sonunda eklenir. Eşdeğer ve daha okunaklı şekilde kullanın parentNode.appendChild(newChild).


7
bu yüzden prepend temelde o zamanfunction prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
Muhammed Umer

166

İşte başlamanız için bir pasaj:

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.firstChildbize içindeki ilk öğeye bir referans verir theParentve theKidondan önce koyar .


Teşekkürler, neden prepend için ek div oluşturmadan insertBefore kullanın? Grumdrig cevap gibi?
Yosef

bu bir eleman oluşturur ve dom'a ekler, işi farklı bir şekilde ekler ve önler
Andrei Cristian Prodan

Bunu Grumdig'in cevabına kıyasla anladım
Andrew

10
Henüz 2015. Yerleşik bir prepend()yöntemimiz olabilir mi?
1.21 gigawatts

Node.append veya node.appendChild geçersiz yöntemlerdir, bunun yerine insertBefore (düğüm, null) kullanın
53'te Suhayb

28

Bize burada devam etmek için fazla bir şey vermediniz, ama bence sadece bir öğenin başına veya sonuna nasıl içerik ekleyeceğinizi mi soruyorsunuz? Öyleyse, bunu oldukça kolay bir şekilde yapabilirsiniz:

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

Çok kolay.


Güzel, tam aradığım şey.
Andrei Cristian Prodan

2
@Munzilla Bu yöntem, tarayıcıyı mevcut tüm çocukları tekrar ayrıştırmaya zorlar. Yukarıdaki çözümlerde Tarayıcının verilen çocuğu belgeye eklemesi yeterlidir.
Sayam Qazi

12

Ne kadar karmaşık olursa olsun, ham bir HTML dizesi eklemek isterseniz insertAdjacentHTML, uygun ilk argümanla: kullanabilirsiniz :

'beforebegin' Elemanın kendisinden önce. 'afterbegin' Öğenin hemen içinde, ilk çocuğundan önce. 'beforeend' Elemanın içinde, son çocuğundan sonra. 'afterend' Elemanın kendisinden sonra.

İpucu: Eklenecek Element.outerHTMLöğeyi temsil eden HTML dizesini almak için her zaman arayabilirsiniz .

Bir kullanım örneği:

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

DEMO

Dikkat: insertAdjacentHTML bağlı olan dinleyicileri korumaz .addEventLisntener.


" insertAdjacentHTMLdinleyicileri korumaz ..." Ne dinleyicileri? Bu HTML, bu yüzden henüz bağlanacak öğe yok. İçerideki mevcut unsurlara atıfta foobulunuyorsanız, bu gerçek bir ifade değildir. Bütün mesele .insertAdjacentHTMLtam o korumak yapar dinleyicileri. Belki de düşünüyorsunuz .innerHTML += "...", eski DOM düğümlerini yok ediyor.
spanky

@spanky Bu ifadenin birden çok şekilde yorumlanabileceği konusunda haklısınız, aslında kastettiğim, taze olarak oluşturulmuş DOM düğümleriydi insertAdjacentHTML(kök veya kökün mevcut torunları değil)
artur grzesiak

6

Bunu projeme ekledim ve işe yarıyor gibi görünüyor:

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

Misal:

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

5

Hayatınızı kolaylaştırmak için HTMLElementnesneyi uzatabilirsiniz . Eski tarayıcılar için işe yaramayabilir, ancak kesinlikle hayatınızı kolaylaştırır:

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

Bir dahaki sefere bunu yapabilirsiniz:

document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);

1
düğümde alt düğüm yoksa ne olur? Bu durumda
ilkÇocuk

başaşağı zaten var, bkz. ParentNode.prepend (), bu yüzden prependChild yapmak için prnt.prepend (chld) öğesini çağırmak yeterlidir
Igor Fomenko

2

Aşağıda, belgeye paragraf eklemek için prepend seçeneğine bir örnek verilmiştir.

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

sonuç:

<p>Example text</p>

1

2017'de Edge 15 ve IE 12 için biliyorum, prepend yöntemi Div öğeleri için bir özellik olarak dahil edilmedi, ancak herkesin bir işlevi çoklu doldurmak için hızlı bir referansa ihtiyacı varsa bunu yaptım:

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

Çoğu modern tarayıcıyla uyumlu basit ok işlevi.


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

ReferenceElement null veya tanımsızsa, newElement, alt düğüm listesinin sonuna eklenir.

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.

Örnekler burada bulunabilir: Node.insertBefore



-1

Bunu yapmanın en iyi yolu bu değildir, ancak herkes her şeyden önce bir öğe eklemek isterse, işte bir yol.

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.