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>