2016-04-25 2 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, просто используйте этот символ в своем источнике или используйте escape-последовательность Java.

Смежные вопросы