2016-04-25 64 views
0

爲了防止瀏覽器實際上不應該這樣做,我需要在另一個節點的左側側插入Text節點。我需要的是這樣生成的HTML:爲什麼我的空白文本節點沒有插入?

<div contenteditable="true"> 
    "&#8203;" 
    <div class="another-element-i-inserted"><!-- stuff --></div> 
</div> 

的問題是,我做的是居然只給我

<div contenteditable="true"> 
    <div class="another-element-i-inserted"><!-- stuff --></div> 
</div> 

看看調試器是如何對我撒謊:

enter image description here

該負責代碼:

Text textNode = Document.get().createTextNode(""); 
Element textNodeElement = textNode.cast(); 
textNodeElement.setInnerHTML("&#8203;"); 

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內容中

enter image description here

<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> 

回答

1

你設置一個文本節點上innerHTML,這是行不通的:這將創建沒有特殊含義或行爲的節點上的expando屬性。您需要設置data屬性;而不是HTML字符引用,只需在源代碼中使用該字符或使用Java轉義序列即可。

相關問題