2016-04-25 66 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转义序列即可。

相关问题