JavaScript kullanarak div'e veri nasıl eklenir?


404

JavaScript JavaScript'ten div doldurmak için div öğesine veri eklemek için AJAX kullanıyorum, div önceki verileri kaybetmeden div yeni veri nasıl ekleyebilirim?


7
$ (div) .Append (veri);
jimy

56
@ jimy thats jquery, böyle önemsiz bir şey için kullanmaya gerek yok
Naftali aka Neal

2
@ Elbette, ama AJAX kullanıyor, bu yüzden jQuery kesinlikle iyi bir fikir!
Alnitak

3
@Alnitak, ama OP herhangi bir şey için jQuery kullanıyor biliyor musunuz?
Naftali aka Neal

26
@Alnitak, jQuery tek ajax çözümü değil
Naftali aka Neal

Yanıtlar:


585

Bunu dene:

var div = document.getElementById('divID');

div.innerHTML += 'Extra stuff';

31
Tehlike, Will Robinson! Bu , metni değil HTML'yi ekler . Ekstra Öğeleriniz kullanıcı tarafından sağlanıyorsa, yeni bir güvenlik açığı oluşturdunuz. @ Chandu'nun cevabını aşağıda kullanmak daha iyi.
David

8
Evet, bu bir XSS güvenlik açığı . Aşağıdaki yanıtta açıklandığı gibi, bunun yerine içerikle bir metin düğümü oluşturmaktan çok daha iyidir.
David Verilen

1
Bu ayrıca divolay dinleyicili öğeler veya kullanıcı tarafından girilen metin içeren girişler içeriyorsa da çalışmaz . Chandu'nun cevabını tavsiye ederim .
user4642212


2
Evet, kesinlikle herhangi bir onay kutusunun, olay dinleyicisinin durumunu yok edeceği için bunu önermiyorum.
Kurkula

338

AppendChild kullanma:

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
var content = document.createTextNode("<YOUR_CONTENT>");
theDiv.appendChild(content);

İnnerHTML kullanımı:
Bu yaklaşım, @BiAiB tarafından belirtilen mevcut öğelerin tüm dinleyicilerini kaldıracaktır. Bu sürümü kullanmayı planlıyorsanız dikkatli olun.

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
theDiv.innerHTML += "<YOUR_CONTENT>"; 

Bu yöntemi angularjs bağlama ile "içerik" benim öğe ile kullanın ve her şey doğru çalışıyor!
wrongite

1
Gerçekten kabul edilen cevap olmalı. Sadece güzel bir yol değil, innerHTML de DOM'yi yeniden inşa edecek ve bu sadece iyi bir çözüm değil. AppendChild () kullanın.
Jan Sverre

4
Bu daha iyidir, ancak createTextNodeHTML yüklüyorsanız çalışmaz. Örneğin, liste öğeleri eklemek isterseniz bu işe yaramaz. Bu oldukça sınırlayıcı.
Jake

bir sonraki etkinlikte aynı eklenen metin düğümünün metnini değiştirmek istersek ne olur?
Rahul Mishra

120

Dikkat innerHTML, sen tür kaybetmek şey Eğer kullandığınız zaman:

theDiv.innerHTML += 'content',     

Şuna eşittir:

theDiv.innerHTML = theDiv.innerHTML + 'content'

Hangi içindeki tüm düğümleri yok edecek divve yenilerini yeniden oluşturacak. İçindeki öğelere yapılan tüm referanslar ve dinleyiciler kaybolacaktır .

Bunları saklamanız gerekiyorsa (örneğin, bir tıklama işleyicisi eklediğinizde), yeni içerikleri DOM işlevlerine (appendChild, insertAfter, insertBefore) eklemeniz gerekir:

var newNode = document.createElement('div');      
newNode.innerHTML = data;
theDiv.appendChild( newNode )

2
evet ama bu ana div içinde gerekli olmayan ve bazı css stilleri berbat olabilir ekstra bir div neden olur
Naftali aka Neal

@Neal, appendChild'i kullanmanın örnek bir yoludur. mesele burada değil.
BiAiB

Bunu yapmak için doğru yol appendChild@Cybernate
Naftali aka Neal

3
@Hayır hayır değil. Doğru ya da yanlış değil. Sadece OP'nin neye ihtiyacı olduğuna bağlıdır: metin, html kodu veya başka bir şey.
BiAiB

1
@Neal, bu verileri eklemenin mükemmel bir yoludur ve daha çok yönlüdür document.createTextNode().
Alnitak

57

Hızlı bir şekilde yapmak ve referansları ve dinleyicileri kaybetmek istemiyorsanız: .insertAdjacentHTML () ;

" Kullanıldığı elemanı yeniden parçalamaz ve bu nedenle elemanın içindeki mevcut elemanları bozmaz . Bu ve fazladan serileştirme adımından kaçınmak onu doğrudan innerHTML manipülasyonundan çok daha hızlı hale getirir ."

Tüm ana hat tarayıcılarında (IE6 +, FF8 +, Diğerleri ve Mobil) desteklenir: http://caniuse.com/#feat=insertadjacenthtml

Https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML sitesinden bir örnek

// <div id="one">one</div>
var d1 = document.getElementById('one');
d1.insertAdjacentHTML('afterend', '<div id="two">two</div>');

// At this point, the new structure is:
// <div id="one">one</div><div id="two">two</div>

Bu yöntemi kullanırken dikkat edilmesi gereken noktalar, kısıtlamalar vb. var mı?
som

1
Müthiş uyumluluk: daha iyi çözüm!
Arthur Araújo

2
Ayrıca insertAdjacentElement()ve vardır insertAdjacentText().
nyg


Bu yöntem en iyi çözümdür!
Sergey NN


8

Bu bile işe yarar:

var div = document.getElementById('divID');

div.innerHTML += 'Text to append';

6

IE9 + (Vista +) çözümü, yeni metin düğümleri oluşturmadan:

var div = document.getElementById("divID");
div.textContent += data + " ";

Ancak, her mesajdan sonra yeni bir satıra ihtiyaç duyduğum için bu benim için hile yapmadı, bu yüzden DIV'm bu kodla stilize bir UL'ye dönüştü:

var li = document.createElement("li");
var text = document.createTextNode(data);
li.appendChild(text);
ul.appendChild(li);

Gönderen https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent :

İç HTML'den farklılıklar

innerHTML, HTML'yi adından da anlaşılacağı gibi döndürür. Çoğu zaman, bir öğenin içindeki metni almak veya yazmak için, insanlar innerHTML kullanır. Bunun yerine textContent kullanılmalıdır. Metin HTML olarak ayrıştırılmadığından, daha iyi performans gösterebilir. Dahası, bu bir XSS saldırı vektörünü önler.


3

jQuery kullanabilirsiniz. bu da çok basit.

jQuery dosyasını jQuery'yi HTML'nize ekleyin
veya çevrimiçi kullanıcı bağlantısı yapabilirsiniz:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

ve şunu deneyin:

 $("#divID").append(data);

1

Aşağıdaki yöntem diğerlerinden daha az geneldir, ancak div'ın son alt düğümünün zaten bir metin düğümü olduğundan emin olduğunuzda harikadır. Bu şekilde, MDN Reference AppendData kullanarak yeni bir metin düğümü oluşturmazsınızappendData

let mydiv = document.getElementById("divId");
let lastChild = mydiv.lastChild;

if(lastChild && lastChild.nodeType === Node.TEXT_NODE ) //test if there is at least a node and the last is a text node
   lastChild.appendData("YOUR TEXT CONTENT");

0

Neden sadece setAttribute kullanmıyorsunuz?

thisDiv.setAttribute('attrName','data you wish to append');

Ardından bu verileri aşağıdaki yollarla alabilirsiniz:

thisDiv.attrName;

Çünkü bunun soru ile ilgisi yok mu?
FaZe Unempl0yedd

-1

java betiği

document.getElementById("divID").html("this text will be added to div");

jQuery

$("#divID").html("this text will be added to div");

.html()Girdiğinizi görmek için argüman olmadan kullanın . Kodunuzda kullanmadan önce bu işlevleri hızlı bir şekilde test etmek için tarayıcı konsolunu kullanabilirsiniz.


Bu, kabul edilen cevabın bir kopyasıdır. Neden?
Stephen Rauch

innerHtml ve html () projemde farklı çalıştı. innerHtml bir senaryoda hiçbir şey yapmadı. Yani, herkes için aynı olması durumunda ekledi.
Deepu Sahni
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.