簡體   English   中英

如何將 append 文本發送到 `<div> `?</div><div id="text_translate"><p> 我正在使用 AJAX 到 append 數據到&lt;div&gt;元素,其中我從 JavaScript 填充&lt;div&gt; 。 我怎樣才能將 append 新數據添加到&lt;div&gt;而不丟失之前在其中找到的數據?</p></div>

[英]How to append text to a `<div>`?

我正在使用 AJAX 到 append 數據到<div>元素,其中我從 JavaScript 填充<div> 我怎樣才能將 append 新數據添加到<div>而不丟失之前在其中找到的數據?

嘗試這個:

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

div.innerHTML += 'Extra stuff';

使用 appendChild:

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

使用內部HTML:
這種方法將刪除@BiAiB 提到的現有元素的所有偵聽器。 因此,如果您打算使用此版本,請謹慎使用。

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

小心innerHTML ,當你使用它時你會失去一些東西:

theDiv.innerHTML += 'content';

相當於:

theDiv.innerHTML = theDiv.innerHTML + 'content';

這將破壞div所有節點並重新創建新節點。 對其中元素的所有引用和偵聽器都將丟失

如果您需要保留它們(例如,當您附加了點擊處理程序時),您必須使用 DOM 函數(appendChild,insertAfter,insertBefore)附加新內容:

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

如果您想快速完成並且不想丟失引用和偵聽器,請使用: .insertAdjacentHTML() ;

“它不會重新解析它正在使用的元素,因此它不會破壞元素內的現有元素。這和避免額外的序列化步驟使它比直接的 innerHTML 操作快得多。”

支持所有主流瀏覽器(IE6+、FF8+、所有其他瀏覽器和移動設備): http : //caniuse.com/#feat=insertadjacenthtml

來自https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML 的示例

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

如果您使用的是 jQuery,則可以使用$('#mydiv').append('html content')它將保留現有內容。

http://api.jquery.com/append/

IE9+ (Vista+) 解決方案,無需創建新的文本節點:

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

然而,這對我來說並沒有完全奏效,因為我需要在每條消息后換行,所以我的 DIV 變成了帶有以下代碼的樣式化 UL:

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

來自https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent

與innerHTML的區別

innerHTML 如其名稱所示返回 HTML。 很多時候,為了在元素中檢索或寫入文本,人們使用innerHTML。 應該使用 textContent 代替。 因為文本不會被解析為 HTML,所以它可能具有更好的性能。 此外,這避免了 XSS 攻擊向量。

即使這樣也可以:

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

div.innerHTML += 'Text to append';

你可以使用jQuery。 這使它非常簡單。

只需下載 jQuery 文件,將 jQuery 添加到您的 HTML 中
或者您可以使用在線鏈接:

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

試試這個:

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

以下方法不如其他方法通用,但是當您確定 div 的最后一個子節點已經是文本節點時,它會很棒。 這樣你就不會使用appendData MDN Reference AppendData創建一個新的文本節點

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

我認為比目前提到的任何一個更好的選項是Element.insertAdjacentText()

 // Example listener on a child element // Included in this snippet to show that the listener does not get corrupted document.querySelector('button').addEventListener('click', () => { console.log('click'); }); // to actually insert the text: document.querySelector('div').insertAdjacentText('beforeend', 'more text');
 <div> <button>click</button> </div>

這種方法的優點包括:

  • 不修改 DOM 中的現有節點; 不會破壞事件監聽
  • 插入文本,而不是 HTML(在故意插入 HTML 時最好只使用.insertAdjacentHTML - 不必要地使用它在語義上不太合適,並且會增加 XSS 的風險)
  • 靈活的; .insertAdjacentText的第一個參數可能是beforebeginbeforeendafterbeginafterend ,具體取決於您希望將文本插入的位置

腳本

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

查詢

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

使用不帶任何參數的.html()來查看您已輸入。 在您的代碼中使用這些功能之前,您可以使用瀏覽器控制台快速測試它們。

為什么不直接使用 setAttribute ?

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

然后你可以通過以下方式獲取這些數據:

thisDiv.attrName;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM