Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按字符位置定位节点(相对于innerText的位置)_Javascript_Html_Dom - Fatal编程技术网

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;iif(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>