获取所有子节点javascript

获取所有子节点javascript,javascript,Javascript,嗨,我正在尝试在contenteditable div中添加一个带有空格的html; 问题是,上面的代码只返回第一个DIV的内容,而忽略其他所有内容 var tdiv = document.createElement('div'); tdiv.innerHTML = '<div>testing html</div>&nbsp;'; var replacment = tdiv.firstChild; // el.insertNode(replacment); /

嗨,我正在尝试在contenteditable div中添加一个带有空格的html; 问题是,上面的代码只返回第一个DIV的内容,而忽略其他所有内容

var tdiv = document.createElement('div');
tdiv.innerHTML = '<div>testing html</div>&nbsp;';
var replacment = tdiv.firstChild; // 

el.insertNode(replacment); // it is just the purpose, "el" is the HTML element

通过此操作,nbsp将被删除。

如果您希望将tdiv的所有子项添加到el,请重试


演示:

您可以创建一个包含nbsp的元素,如下所示:

var div = document.createElement("div");
div.innerHTML = "&nbsp;";
var replacement = '<div>testing</div>&nbsp;',startAfter,i,tdiv = document.createElement('div');
tdiv.innerHTML = replacment;
replacment=document.createDocumentFragment();
while(i=tdiv.firstChild) replacment.appendChild(i);
startAfter = replacment.lastChild;

 // This is my extra code to the contenteditable div insert and positioning the caret - this.range is my selection range.
 this.range.insertNode(replacment);
 this.range.setStartAfter(startAfter);
如果确实只需要一个具有文本空间的元素,则可以创建一个文本节点:

var div = document.createElement("div");
div.appendChild(document.createTextNode(" "));
再看一次你的问题,实际上你很不清楚你真正在问什么,而且你的问题可能有很多不同的含义。所以,这只是你可能会问的一种可能性

如果要将其添加为元素,则需要将其放入某种容器中,因为非分隔空间本身不是元素。您可以将其包装在这样的元素中,然后插入

或者,插入带有空格的文本节点也可以:

el.appendChild(document.createTextNode(" "));

在Arun p Johny提出这个想法后,我决定:

var div = document.createElement("div");
div.innerHTML = "&nbsp;";
var replacement = '<div>testing</div>&nbsp;',startAfter,i,tdiv = document.createElement('div');
tdiv.innerHTML = replacment;
replacment=document.createDocumentFragment();
while(i=tdiv.firstChild) replacment.appendChild(i);
startAfter = replacment.lastChild;

 // This is my extra code to the contenteditable div insert and positioning the caret - this.range is my selection range.
 this.range.insertNode(replacment);
 this.range.setStartAfter(startAfter);

谢谢大家,即使是反对票:p

标题和问题内容之间的联系是什么?有了这个,nbsp将被删除。不,不会的。你在问什么??如何获取所有子节点?不那么还有什么?这个问题真的不清楚。似乎至少有4种不同的意思,但我猜这实际上不是这4种意思,而是其他意思。如果OP没有澄清,这个问题应该结束,因为你不清楚你在问什么。@devnull69你甚至检查了附带的小提琴:这是一个接近的答案。我正在想办法。我想取消否决票,但我不能。该代码实际上工作正常,因为它在将第一个子项附加到el后将其从tdiv中删除。我没想到:-谢谢你@ArunPJohny。根据您的回答,我的解决方法如下:tdiv=document.createElement'div';tdiv.innerHTML=替换;replacment=document.createDocumentFragment;whilei=tdiv.firstChild replacment.appendChildi;startAfter=replacment.lastChild;谢谢你的回答。我很抱歉我的英语不好。我需要将其作为对象添加为object.InsertNodeReplace;它将添加到可编辑的内容列表中div@JohnMark-我添加了更多选项。你想做什么还不完全清楚。谢谢你的帮助。我需要在如下选择范围内返回它:.range.InsertNodeReplacement。range.setStartAfterreplacment;这就是为什么我不能使用appendChild,这是我的困难所在。@JohnMark-你可能应该从一个新问题开始,在这个问题上描述你试图解决的实际问题。包括contenteditablediv,这是一个详细的描述,详细描述了您试图实现的结果,以及您试图对我仍然不理解的范围做些什么。今晚我就要结束了,所以今晚我不能再帮你了。