如何使用JavaScript将数据附加到div?

如何使用JavaScript将数据附加到div?,javascript,Javascript,我正在使用AJAX将数据附加到div元素,在这里我从JavaScript填充div,如何将新数据附加到div中而不丢失div中以前的数据?尝试以下方法: var div = document.getElementById('divID'); div.innerHTML += 'Extra stuff'; 使用appendChild: var theDiv = document.getElementById("<ID_OF_THE_DIV>"); var content = doc

我正在使用AJAX将数据附加到div元素,在这里我从JavaScript填充div,如何将新数据附加到div中而不丢失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);
var theDiv=document.getElementById(“”);
var content=document.createTextNode(“”);
第四章附则(内容);
使用innerHTML:
这种方法将删除@BiAiB提到的现有元素的所有侦听器。因此,如果您计划使用此版本,请谨慎使用

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

如果使用jQuery,可以使用
$(“#mydiv”).append('html content')
,它将保留现有内容


小心
innerHTML
,当你使用它时,你会失去一些东西:

theDiv.innerHTML += 'content';
相当于:

theDiv.innerHTML = theDiv.innerHTML + 'content';
这将销毁
div
中的所有节点并重新创建新节点对其中元素的所有引用和侦听器都将丢失

如果需要保留它们(例如,当附加了单击处理程序时),则必须使用DOM函数(appendChild、insertAfter、insertBefore)附加新内容:

即使这样也会奏效:

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>

如果您想快速执行,并且不想丢失引用和侦听器,请使用:.insertAdjacentHTML()

它不会重新分析正在使用的元素,因此不会损坏元素中的现有元素。这避免了额外的序列化步骤,使它比直接的innerHTML操作快得多

支持所有主线浏览器(IE6+、FF8+、所有其他浏览器和移动浏览器):

来自

//一个
var d1=document.getElementById('one');
d1.插入式相邻TML(“尾端”、“二”);
//此时,新结构为:
//一二
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);
发件人:

与innerHTML的区别

innerHTML返回其名称指示的HTML。通常,为了检索或写入元素中的文本,人们使用innerHTML。应改为使用文本内容。因为文本没有被解析为HTML,所以它可能有更好的性能。此外,这避免了XSS攻击向量。
为什么不直接使用setAttribute呢

thisDiv.setAttribute('attrName','data you wish to append');
然后,您可以通过以下方式获取此数据:

thisDiv.attrName;

java脚本

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

$("#divID").html("this text will be added to div");
使用不带任何参数的
.html()
查看您是否已输入。
在代码中使用这些函数之前,您可以使用浏览器控制台快速测试这些函数。

以下方法没有其他方法那么通用,但是当您确定div的最后一个子节点已经是文本节点时,它非常有用。这样,您就不会使用
appendData



$(div).追加(数据)@jimy那是jquery,没必要用它来处理这么琐碎的事情thing@Neal当然,但他也在使用AJAX,所以jQuery绝对是个好主意@Alnitak,但是你怎么知道OP在使用jQuery做任何事情呢?@Alnitak,jQuery不是唯一的ajax解决方案是的,但是这会导致父div中有一个额外的div,这是不需要的,可能会弄乱一些cssstyles@Neal这只是使用appendChild的一个示例方法。重点不在这里。执行
appendChild
的正确方法是由@Cybernate@Neal不,不是。这既不正确也不错误。这取决于OP需要附加什么:文本、html代码或其他内容。@Neal这是一种非常好的附加数据的方法,比
document.createTextNode()
更通用。使用此方法时有任何注意事项、限制等吗?非常棒的兼容性:更好的解决方案!还有
insertAdjacentElement()
insertAdjacentText()
。这种方法是最好的解决方案!危险,威尔·罗宾逊!这将添加HTML,而不是文本。如果用户提供了额外的内容,那么您就引入了一个安全漏洞。最好使用下面@Chandu的答案。是的,这是一个。如果
div
包含包含事件侦听器的元素或包含用户输入文本的输入,则这也不起作用。我推荐。这是不推荐的,请看是的,我绝对不建议这样做,因为这将破坏任何复选框、事件侦听器的状态。我将此方法用于带有angularjs绑定的“contenteditable”元素,并且一切正常!这应该是公认的答案。这不仅是一种漂亮的方法,而且innerHTML将重建DOM,这不是一个好的解决方案。使用appendChild()。这样更好,但是如果加载HTML,
createTextNode
将不起作用。例如,如果您想添加列表项,这将不起作用。这是非常有限的。如果我们想在下一个事件中更改相同附加文本节点的文本,该怎么办?这是一个接受答案的副本,另一个是另一个。为什么?innerHtml和html()在我的项目中的工作方式不同。innerHtml在一个场景中什么也没做。因此添加了它,以防它对其他任何人都是一样的。在s的原型链的任何地方都不存在
innerHtml
html
属性。jQuery替代方案有所有的缺点(不幸的是),它需要一个不必要的依赖项?
thisDiv.attrName;
document.getElementById("divID").html("this text will be added to div");
$("#divID").html("this text will be added to div");
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");