javascript - 如何计算从根 div 到 focusNode 的文本长度?
问题描述
root
想象一下,我有一个带有一堆子节点的节点树(顶级),如下所示:
<div id="root" contenteditable="true" >
Inside div <span>Inside span </span><a>Inside link </a><span>Inside span </span>Inside div again
</div>
当我单击 this中的任何位置时div
,我会focusNode
根据我的单击获得一个(简单单击,而不是单击并按住以进行选择)。
const selection = window.getSelection();
const focusNode = selection.focusNode; // This is the node where the caret is
问题
root
在找到 之前,我如何计算文本focusNode
?遍历所有可能的孩子并一路添加每个文本长度。找到focusNode
后,返回总值。
注意:我没有使用 jQuery。
function handleClick() {
const root = document.getElementById('root');
const selection = window.getSelection();
const focusNode = selection.focusNode;
countTextFromRootToFocus(root,focusNode);
}
function countTextFromRootToFocus(root,focusNode) {
console.log('Text length from root to focus is: XXX');
}
#root {
border: 1px dotted blue;
}
<p>Click anywhere inside the div</p>
<div id="root" contenteditable="true" onclick="handleClick()">
Inside div <span>Inside span </span><a>Inside link </a><span>Inside span </span>Inside div again
</div>
解决方案
推荐阅读
- excel - 对象'_Workbook'的方法'SaveAs'在其他计算机上失败
- c++ - QSqlTableModel 到 qml 列表多次出现
- c++ - Add delete characters when clicking on backspace
- reactjs - OfficeDev / office-ui-fabric-react - ChoiceGroup 组件
- r - 光栅:提取光栅图像的中心(geoTIFF)并绘制其边界
- javascript - 通过道具值对路径进行动态渲染反应
- vim - ESC [?1c 转义序列在 Linux 控制台上的作用是什么?
- python - 如何使用 groupby 和 sum 删除重复项
- spring-boot - Spring Boot REST 方法中的 Micrometer @Timed 和 Prometheus 错误
- css - CSS 从元素中删除所有通用样式