我正在用Javascript编写客户端应用程序,我正在使用以下函数:
function creation() {
var userSelection;
if (window.getSelection) {
userSelection = window.getSelection();
}
else if (document.selection) { // should come last; Opera!
userSelection = document.selection.createRange();
}
var rangeObject = getRangeObject(userSelection);
var startOffset = rangeObject.startOffset;
var endOffset = rangeObject.endOffset;
var startCon = rangeObject.startContainer;
var endCon = rangeObject.endContainer;
var myRange = document.createRange();
myRange.setStart(startCon,rangeObject.startOffset);
myRange.setEnd(endCon, rangeObject.endOffset);
$('#result').text(myRange.toString());
}
function getRangeObject(selectionObject) {
if (selectionObject.getRangeAt) {
var ret = selectionObject.getRangeAt(0);
return ret;
}
else { // Safari!
var range = document.createRange();
range.setStart(selectionObject.anchorNode, selectionObject.anchorOffset);
range.setEnd(selectionObject.focusNode, selectionObject.focusOffset);
return range;
}
}
我需要一种方法来了解与body元素相关的字符偏移量。我找到了一个函数来计算元素中的字符:
function getCharacterOffsetWithin(range, node) {
var treeWalker = document.createTreeWalker(
node,
NodeFilter.SHOW_TEXT,
function (node) {
var nodeRange = document.createRange();
nodeRange.selectNode(node);
return nodeRange.compareBoundaryPoints(Range.END_TO_END, range) < 1 ?
NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
},
false
);
var charCount = 0;
while (treeWalker.nextNode()) {
charCount += treeWalker.currentNode.length;
}
if (range.startContainer.nodeType == 3) {
charCount += range.startOffset;
}
return charCount;
}
答案 0 :(得分:1)
这看起来像我的一个答案中的函数。我过分复杂了一点;看到这个答案的更简单的功能,适用于IE&lt; 9以及:https://stackoverflow.com/a/4812022/96100。您只需将document.body
作为node
参数传递即可。另外,请阅读链接答案中有关此方法缺点的部分。
这是一个现场演示:http://jsfiddle.net/PzQjA/
答案 1 :(得分:0)
这是否已经解决了#34;在某种方式来获取innerText内的caretOffset而不是textContent?
通过双击选择后,我找到了一个有效的解决方案......
A better way to extract innerText around getSelection()
还有更好的方法吗?