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

标签 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 ();
     }
   }

});

最佳答案

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

添加以下内容而不是上面的行解决了我的问题。

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

关于javascript - 如何从范围对象获取当前节点引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42564823/

相关文章:

javascript - 如何将下拉菜单保持在 ActiveX 之上

javascript - 如何对 js 上的所有类做某事

javascript - 从字符串中删除特殊字符(HTML 标记内的特殊字符除外)

python , Bokeh : How to change range of datetime axis

python - 将 x Axis 分成 2 个以上的部分 (Python)

textarea - 如何知道用户在 JavaFX TextArea 中选择了哪个文本字符串

javascript - 在 select2 多选中添加动态色 block - Laravel 5.2

javascript - 在 contenteditable div 中选择范围

asp.net-mvc-3 - MVC3下拉列表未选择所选项目

javascript - InDesign 扩展脚本 : How do I transform the entire selection?