Javascript 按字符位置定位节点(相对于innerText的位置)
我有这个结构(可以更复杂/包含嵌套标记)Javascript 按字符位置定位节点(相对于innerText的位置),javascript,html,dom,Javascript,Html,Dom,我有这个结构(可以更复杂/包含嵌套标记) 一些文本 其他一些文本 我正在使用编辑器提取屏幕上可见的文本。innerText 我得到: 一些文本 其他一些文本 我的后端服务分析这篇文章,并用“位置”突出显示我。对于上面的示例,假设它返回(0,9),表示开始是包含“Some”的文本节点,结束节点是包含“text”的节点。如何根据给定位置定位这些节点 通过DOM遍历收集文本并跟踪位置,我已经取得了一些成功,但我正在丢失换行符和一些空白(由于textContent)。对此的答案并不简单 最好的解决方
一些文本
其他一些文本
我正在使用编辑器提取屏幕上可见的文本。innerText
我得到:
一些文本
其他一些文本
我的后端服务分析这篇文章,并用“位置”突出显示我。对于上面的示例,假设它返回(0,9),表示开始是包含“Some”的文本节点,结束节点是包含“text”的节点。如何根据给定位置定位这些节点
通过DOM遍历收集文本并跟踪位置,我已经取得了一些成功,但我正在丢失换行符和一些空白(由于
textContent
)。对此的答案并不简单
最好的解决方案是将innerHtml
传递给后端服务,以便正确突出显示文本,并且它需要能够解析HTML
但是,另一种解决方案是将innerText
传递到后端,然后逐步遍历innerHtml
中的所有字符,并忽略尖括号内的所有字符
这可能需要一些空白的清理,以及一些HTML的混乱,但我会让你自己决定
这里有一个例子来说明我的意思
let searchHtml=“一些文本一些其他文本””;
让outputHtml=“”;
让highlightOpenTag=“”;
让highlightCloseTag=“”;
设currentlyHighlighting=false;
//从后端开始和结束位置
设startIndex=0;
设endIndex=9;
设inTag=false;
设textIndex=0;
for(设i=0;i if(char==’谢谢你的想法,但是我正在寻找一种方法来识别实际的文本节点,因为我正在使用Document.createRange(startNode/endNode…)突出显示
获得位置后。我一直在做类似于我写的事情,通过迭代节点,使用node.textContent
并存储此节点覆盖的位置,但正如我所说,我正在丢失innerText的格式,我不想自己处理此格式。@isah听起来这将是一个非常痛苦的DOM walk.it听起来像!:)我想你是想突出显示文本的某些部分,你能确认吗?可能有不同的方法来解决这个问题。是的,只有一些部分,但我不想修改html。我将使用document.createRange(startNode/endNode)突出显示。
<div id="editor">
<p>Some <i>text</i>
<p>Some other text</p>
</div>