我希望能够获得用户高调的文本之前的字符,并且我需要在其中包含html。当呈现以下示例时,用户将只看到" word"。当用户突出显示这一点时,我希望能够找出有一个尖括号(或任何其他字符)
<span>word</span>
以下将给出选择,它给我一个开始和结束索引,但这些是相对于该文本所属的节点。它也是dom相关的,并不包含html。
selectedText= childwindow.getSelection();
为了解决这个问题,我试图在页面的html字符串上获取此文本的indexOf
值,这是有效的。
childwindow.document.documentElement.innerHTML.indexOf(selectedText)
这个问题是,如果我突出显示&#34;&#34;这样一个单词出现在页面上几次,那么索引就不正确了。我能理解为什么,但我不知道还能做什么。我想我需要以某种方式从dom中得到这个,因为它知道我获得的确切文本。
即使这是不可能的,有什么我可以从dom中获取,这将帮助我使indexOf请求更可靠。我可以在引擎盖下添加额外的数据,以确保它符合我想要的值。
答案 0 :(得分:0)
这应该是诀窍:
function textSelected() {
if (window.getSelection) {
t = window.getSelection().toString() || "";
} else if (document.selection && document.selection.type != "Control") {
t = document.selection.createRange().text || "";
}
return t;
}
主要是窗口的函数getSelection
:
返回一个Selection对象,表示所选文本的范围 用户或插入符号的当前位置。
一旦你拥有它,只需从Selection obj中获得你想要的东西。
其他部分是为了防止您选择跨元素。然后你需要使用选择范围。有关document.selection的更多信息: docs