如何从范围对象获取当前节点引用

时间:2017-03-02 20:00:10

标签: javascript range selection contenteditable

我正在尝试使用html()方法实现退格功能,因为它重置了我的情况下不允许的元素的范围对象。

不幸的是,当我有多个节点时,它没有按预期工作。有什么办法可以从范围对象中获取当前节点引用吗?

这是我试过的代码。

    <div id="myDiv" style="color:red" contenteditable="true">The color of this text is red.<br>yellow</div>
        <br /><br />
        <button  id='two'>Backspace</button>

//javascript

$('#two').click(function() 
{
  var div = document.getElementById ("myDiv");
  var doc = div.ownerDocument || div.document;
  var win = doc.defaultView || doc.parentWindow;
  var sel = win.getSelection();
  var range = sel.getRangeAt(0);
  if (document.createRange) 
  {     // all browsers, except IE before version 9
    var textNode = div.firstChild;      // the text node inside the div
    if (textNode.data.length > 1) 
     {
      var rangeObj = document.createRange ();
      if(range.startOffset> 0)
      {
        // aligns the range to the second character
        rangeObj.setStart (textNode, range.startOffset-1);
        rangeObj.setEnd (textNode, range.startOffset);
      }

      rangeObj.deleteContents ();
     }
   }

});

1 个答案:

答案 0 :(得分:1)

 rangeObj.setStart (textNode, range.startOffset-1);
        rangeObj.setEnd (textNode, range.startOffset);

添加以下内容而非上述行修复了我的问题。

 rangeObj.setStart (range.startContainer, range.startOffset-1);
  rangeObj.setEnd (range.startContainer, range.startOffset);