gpt4 book ai didi

javascript - 如何使用范围对象和 window.getSelection() 获取与 body 相关的字符偏移量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:11 24 4
gpt4 key购买 nike

我正在使用 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;
}

最佳答案

这看起来像是我的一个答案中的函数。我把它复杂化了一点;请参阅此答案,了解在 IE < 9 中也适用的更简单的功能:https://stackoverflow.com/a/4812022/96100 .您可以将 document.body 作为 node 参数传入。另外,请阅读链接答案中有关此方法缺点的部分。

这是一个现场演示:http://jsfiddle.net/PzQjA/

关于javascript - 如何使用范围对象和 window.getSelection() 获取与 body 相关的字符偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com