如何通过计算紧随正文标记之后的偏移量来检索所选文本的位置?
例如考虑以下 html,
<body> <div>hi</div> <div>dude!</div> </body>
在从“i”(在 hi 中)到“du”(在 dude 中)中选择时,我需要将 2 作为起始位置,将 4 作为结束位置。
注意:忽略标签元素。
Javascript 更好!
这里有一些简单、朴素的代码来执行此操作,很可能适合您的用例。它不考虑任何可能不可见的文本(例如,通过 CSS 或通过位于 or 元素内部),并且可能存在浏览器差异(IE 与其他所有内容)和换行符,并且不考虑折叠的空白(例如 2 个或多个连续空格字符折叠为页面上的一个可见空格)。但是,它确实适用于所有主要浏览器中的示例。
现场演示:http://jsfiddle.net/UuDpL/2/ http://jsfiddle.net/UuDpL/2/
Code:
function getSelectionCharOffsetsWithin(element) {
var start = 0, end = 0;
var sel, range, priorRange;
if (typeof window.getSelection != "undefined") {
range = window.getSelection().getRangeAt(0);
priorRange = range.cloneRange();
priorRange.selectNodeContents(element);
priorRange.setEnd(range.startContainer, range.startOffset);
start = priorRange.toString().length;
end = start + range.toString().length;
} else if (typeof document.selection != "undefined" &&
(sel = document.selection).type != "Control") {
range = sel.createRange();
priorRange = document.body.createTextRange();
priorRange.moveToElementText(element);
priorRange.setEndPoint("EndToStart", range);
start = priorRange.text.length;
end = start + range.text.length;
}
return {
start: start,
end: end
};
}
alert( getSelectionCharOffsetsWithin(document.body).start );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)