javascript - 获取光标插入符所在的选定内容可编辑元素的子元素的 ID

标签 javascript jquery html css contenteditable

我目前正在尝试使用 contenteditable div 制作一个编辑器,但遇到一个问题,在开始时单击 child-2 中的退格键将导致合并 child- 1child-2 在一起,这违背了它自己的目的。

我正在使用以下函数查找当前插入符位置:

caret: function() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt) return sel.getRangeAt(0).startOffset;
    }
    return null;
}

这一直工作得很好,但是为了解决合并问题,我需要找出当前选择了哪个元素,并将该数据与插入符号位置一起使用,以使用 event.preventDefault() 并停止潜在的合并。

这是我正在使用和谈论的框架:

<div id="parent" contenteditable="true">
  <div id="child-1">
    One
  </div>
  <div id="child-2">
    Two
  </div>
  <div id="child-3">
    Three
  </div>
</div>

为了查找所选元素,我尝试过以下操作:

console.log(document.activeElement);

看看这是否会打印出所选子元素的ID,尽管这会将整个父元素输出到控制台,而不仅仅是 ID。

最佳答案

使用Event Delegation轻松找到单击的节点。还可以添加其他事件,例如按键和鼠标。

详细信息在演示中评论

演示

// Refernce the parent of all of the target nodes
var parent = document.getElementById('parent');
// Register the click event to #parent
parent.addEventListener('click', idNode);

// This is the callback that is invoked on each click
function idNode(e) {
  /* If the node clicked (e.target) is not the 
  || the registered event listener 
  || (e.currentTarget = #parent)
  */
  if (e.target !== e.currentTarget) {
    // Get the #id of clicked node
    var ID = e.target.id;
    // Reference e.target by its #id
    var child = document.getElementById(ID);

  }
  // Log the #id of each e.target at every click
  console.log('The caret is located at ' + ID);
  
  // Return the e.target as a DOM node when needed
  return child;

}
<div id="parent" contenteditable="true">
  <div id="child-1">
    One
  </div>
  <div id="child-2">
    Two
  </div>
  <div id="child-3">
    Three
  </div>
</div>

关于javascript - 获取光标插入符所在的选定内容可编辑元素的子元素的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46436973/

相关文章:

javascript - 如何使用 javascript/jQuery 重写亚马逊成员(member)链接?

html - 在 Blade 模板中的表单标签内使用 <span>

javascript - 为什么我的代码只将 "null"添加到我的购物 list 中?

javascript - 如何用jquery查看弹出框的大量数据?

jquery - (jquery) 我如何将这个 contains 声明转换为 "not"等效项?

javascript - 使用 jQuery 时如何让 href 跟随链接

html - 淡入颜色按钮从 btn-primary 到 btn-success

javascript - 搜索我的 HTMLCollection 是否包含特定文本

javascript - 无法从 aspx 页面获取下拉选定值到后端

javascript - Google Visualization API - 德国地理 map 区域