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

IT技术 javascript
2021-02-07 01:28:34

我正在使用 AJAX 将数据附加到 div 元素,在那里我从 JavaScript 填充 div,如何将新数据附加到 div 而不丢失在 div 中找到的先前数据?

6个回答

试试这个:

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

div.innerHTML += 'Extra stuff';
是的,我绝对不推荐这样做,因为这会破坏任何复选框、事件侦听器的状态。
2021-03-13 01:28:34
是的,这是一个XSS 漏洞您最好创建一个包含内容的文本节点,如下面的答案所述。
2021-03-14 01:28:34
如果div包含带有事件侦听器的元素或带有用户输入文本的输入,这也不起作用我推荐Chandu答案
2021-03-22 01:28:34
危险,威尔罗宾逊!这会添加HTML,而不是文本。如果您的 Extra Stuff 是由用户提供的,则您刚刚引入了安全漏洞。最好在下面使用@Chandu 的回答。
2021-03-31 01:28:34

使用 appendChild:

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>"; 
我将此方法与带有 angularjs 绑定的“contenteditable”元素一起使用,并且一切正常!
2021-03-21 01:28:34
如果我们想在下一个事件中更改相同附加文本节点的文本怎么办?
2021-03-29 01:28:34
确实应该是公认的答案。不仅是一种漂亮的方式,而且innerHTML 会重建DOM,这不是一个好的解决方案。使用 appendChild()。
2021-04-05 01:28:34
这更好,但createTextNode如果您正在加载 HTML 它将不起作用。例如,如果您想添加列表项,这将不起作用。这是非常有限的。
2021-04-10 01:28:34

当心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);
@Neal 这是一种非常好的附加数据的方式,并且比document.createTextNode().
2021-03-14 01:28:34
正确的做法appendChild是由@Cyber​​nate 完成的
2021-03-15 01:28:34
@Neal 不,不是。它既不正确也不不正确。这仅取决于 OP 需要附加的内容:文本、html 代码或其他内容。
2021-03-24 01:28:34
是的,但这会导致父 div 中有一个额外的 div,这是不需要的,可能会弄乱一些 css 样式
2021-04-09 01:28:34
@Neal 这只是使用 appendChild 的示例方法。重点不在这里。
2021-04-10 01:28:34

如果您想快速完成并且不想丢失引用和侦听器,请使用:.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>
使用这种方法时有什么注意事项、限制条件等吗?
2021-03-21 01:28:34
令人敬畏的兼容性:更好的解决方案!
2021-04-05 01:28:34
这个方法是最好的解决办法!
2021-04-07 01:28:34
还有insertAdjacentElement()insertAdjacentText()
2021-04-08 01:28:34

如果您使用的是 jQuery,则可以使用$('#mydiv').append('html content')它,它会保留现有内容。

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