0
为了防止浏览器实际上不应该这样做,我需要在另一个节点的左侧侧插入Text
节点。我需要的是这样生成的HTML:为什么我的空白文本节点没有插入?
<div contenteditable="true">
"​"
<div class="another-element-i-inserted"><!-- stuff --></div>
</div>
的问题是,我做的是居然只给我
<div contenteditable="true">
<div class="another-element-i-inserted"><!-- stuff --></div>
</div>
看看调试器是如何对我撒谎:
该负责代码:
Text textNode = Document.get().createTextNode("");
Element textNodeElement = textNode.cast();
textNodeElement.setInnerHTML("​");
this.pasteHtmlAtCaret(contenteditableDiv.getElement(), textNodeElement);
this.pasteHtmlAtCaret(contenteditableDiv.getElement(), this.getElement());
其中pasteHtmlAtCaret()
实际上是一个native
方法又称JavaScript:
private native void pasteHtmlAtCaret(Element el, Element toInsert) /*-{
var sel, range;
if ($wnd.getSelection) {
// IE9 and non-IE
sel = $wnd.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
range.insertNode(toInsert);
}
}
}-*/;
为什么不是文本节点插入是否正确?这个问题我有没有,零空白字符是,如果another-element-i-inserted
是一行中的第一个元素,将脱字符号放在起始位置实际上将插入符号another-element-i-inserted
内,这是有问题的。我需要插入符*总是”被放置在contenteditable
任何想法/对这个建议
进一步的信息:?
在这里你可以看到插入符号是如何orange
而不是black
。原因是因为插入符号实际上在附加HTML内容中
<div contenteditable="true" class="contenteditable-textarea">
<div style="display: initial;">
<input type="text" class="mention-textbox notransition" style="color: orange; width: 35px;" readonly="true">
</div>
</div>