Rangy - insertNode IE< 9不插​​入插入符号

时间:2013-06-04 15:29:28

标签: javascript internet-explorer contenteditable rangy

我使用Rangy兼容在WYSIWYG编辑器(uEditor)中插入节点。

然而,在IE< 9插入的节点位于包含元素(iframe)的开头而不是插入位置。只有在没有文本选择时才会发生这种情况。

我创造了一个小提琴,虽然使用了一个div而不是uEditor使用的jquery / iframe,但它具有相同的效果。

这是小提琴:http://jsfiddle.net/RvNT3/

对于IE< 9:http://jsfiddle.net/RvNT3/embedded/result/

我知道小提琴并不代表我的实际代码,最终可能归结为浏览器。但是,如果有办法让它工作(插入没有文本选择的插入符号),可能只是做的伎俩。

小提琴代码:

<!--HTML-->
  <div id="pageFrame" >
    Some text
  </div>
  <br/>
  <input type="button" id="clickNode" value="Insert Node" />
<!--End HTML-->

//Javascript
var theDiv = document.getElementById('pageFrame');
theDiv.contentEditable = true;

document.getElementById('clickNode').onclick = ( function() {
addTheNode();   
});

function addTheNode()
{
 rangy.init();

 var range = rangy.getSelection().getRangeAt(0);

 alert(range);

 var newNode = document.createElement("code");
            newNode.className = "code";         
            newNode.contentEditable = false;
            newNode.innerHTML = "&nbsp";
            range.insertNode(newNode);                      
}
//End Javascript

/*CSS*/

  body { font-family: verdana; font-size:11px;}

  div { border:1px solid #000000; padding:5px; }

  code { display:block; border:1px solid #ff0000 }    

/*End CSS */

1 个答案:

答案 0 :(得分:3)

问题是选择在insertNode()调用发生之前被销毁。 click事件为时已晚:iframe已经失去焦点,并且在IE中也失去了插入位置。您需要提前执行此操作或阻止点击将焦点从iframe移开。以下内容使用mousedown事件代替click

http://jsfiddle.net/RvNT3/1/embedded/result/