我使用AJAX将数据追加到<div>元素,其中我从JavaScript填充<div>。我怎么能追加新的数据<div>而不丢失以前的数据在其中找到?
当前回答
小心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);
其他回答
使用列表末尾:
var theDiv = document.getElementById("<ID_OF_THE_DIV>");
var content = document.createTextNode("<YOUR_CONTENT>");
theDiv.appendChild(content);
使用innerHTML: 这种方法将删除@BiAiB提到的现有元素的所有侦听器。因此,如果您计划使用这个版本,请谨慎使用。
var theDiv = document.getElementById("<ID_OF_THE_DIV>");
theDiv.innerHTML += "<YOUR_CONTENT>";
下面的方法不像其他方法那么通用,但是当您确定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");
小心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);
即使这样也可以:
var div = document.getElementById('divID');
div.innerHTML += 'Text to append';
试试这个:
var div = document.getElementById('divID');
div.innerHTML += 'Extra stuff';
推荐文章
- 文档之间的区别。addEventListener和window。addEventListener?
- 如何检查动态附加的事件监听器是否存在?
- 如何写setTimeout与参数Coffeescript
- 将JavaScript字符串中的多个空格替换为单个空格
- 向HTML表中添加水平滚动条
- 在notepad++中格式化代码
- 表单中包含表单,可以吗?
- 如何创建表只使用<div>标签和Css
- html5 - canvas元素-多层
- JavaScript: override alert()
- 重置setTimeout
- 如何确保<select>表单字段被禁用时提交?
- 如何在HTML文本换行?
- jQuery有不聚焦的方法吗?
- 反应钩子-正确的方式清除超时和间隔