Man*_*ani 3 html javascript tags jquery selection
如何通过计算身体标签后的立即偏移来检索所选文本的位置?
例如,考虑以下html,
<body> <div>hi</div> <div>dude!</div> </body>
Run Code Online (Sandbox Code Playgroud)
从"i"(在hi)到"du"(在花花公子)中选择时,我需要将2作为起始位置并将4作为结束位置.
注意:忽略标记元素.
Javascript更可取!
Tim*_*own 14
这里有一些简单,天真的代码,可以很好地完成你的用例.它没有考虑到可能不可见的任何文本(通过CSS或者是内部的或元素,例如),并可能有浏览器不符(IE与其他一切)换行,并没有考虑倒塌空白(例如,2个或更多连续的空格字符折叠到页面上的一个可见空间).但是,它适用于所有主流浏览器中的示例.
现场演示:http://jsfiddle.net/UuDpL/2/
码:
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 );
Run Code Online (Sandbox Code Playgroud)