mic*_*nic 17 javascript position character
我有一个HTML元素,里面只有可见文本.这个例子是一个<div>
元件,但也可以是一个<span>
,<p>
或其他DOM元素.
<div>This is a simple example.</div>
Run Code Online (Sandbox Code Playgroud)
单击时,我可以获得光标在div表面上的位置,但是我需要在单击时确定最近的字符和/或其索引在div.innerHTML字符串中的位置.
我在这里的 SVG文本实体的"getCharNumAtPosition"方法中找到了类似的实现.
是否可以在JavaScript中使用HTML实现这样的功能?
(如果解决方案可以在大多数现代浏览器中移植,使用大多数书面语言,并且基于相对稳定的标准,以便以后不会出现问题,那么解决方案将非常有用.)
ros*_*lan 12
$('div').click( function () {
getSelectionPosition ();
});
function getSelectionPosition () {
var selection = window.getSelection();
console.log(selection.focusNode.data[selection.focusOffset]);
alert(selection.focusOffset);
}
Run Code Online (Sandbox Code Playgroud)
这适用于"点击",以及大多数浏览器的"范围".(selection.type = "caret"
/ selection.type = "range"
).
selection.focusOffset()
为您提供内部节点中的位置.如果元素嵌套在例如内部<b>
或<span>
标签中,它将为您提供内部元素内部的位置,而不是全部文本,或多或少.我无法"选择"带有focusOffset
"插入符号"类型的子标记的第一个字母(单击,而不是范围选择).当您单击第一个字母时,它会在标记开头加1之前给出最后一个元素的位置.当您单击第二个字母时,它会正确地为您提供"1".但我没有找到一种方法来访问子元素的第一个元素(偏移0).这个"选择/范围"的东西看起来很麻烦(或者对我来说非常不直观).^^
但是没有嵌套元素的使用非常简单!(适合你的工作<div>
)
由于下面给出的原因,这个答案在被接受时会有效,但现在不再有效.其他答案现在最有用.
Firefox和Chrome都调试了window.getSelection()
行为.可悲的是,这个用例现在没用了.(阅读文档,IE 9及更高版本的行为应相同).
现在,字符的中间用于决定偏移量.这意味着单击一个角色可以返回2个结果.第一个字符为0或1,第二个字符为1或2,等等.
我更新了JSFiddle示例.
请注意,如果您调整窗口大小(Ctrl+鼠标),则Chrome上的行为非常糟糕,只需点击一下即可.