我從another StackOverflow post找到此功能,該功能根據指定的起始和結束範圍(相對於父元素)突出顯示文字。不幸的是,我不完全確定它是如何工作的。這是方法:獲取所選文字相對於元素的選擇範圍
function setSelectionRange(el, start, end) {
if (document.createRange && window.getSelection) {
var range = document.createRange();
range.selectNodeContents(el);
var textNodes = getTextNodesIn(el);
var foundStart = false;
var charCount = 0, endCharCount;
for (var i = 0, textNode; textNode = textNodes[i++];) {
endCharCount = charCount + textNode.length;
if (!foundStart && start >= charCount && (start < endCharCount || (start == endCharCount && i < textNodes.length))) {
range.setStart(textNode, start - charCount);
foundStart = true;
}
if (foundStart && end <= endCharCount) {
range.setEnd(textNode, end - charCount);
break;
}
charCount = endCharCount;
}
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection && document.body.createTextRange) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(true);
textRange.moveEnd("character", end);
textRange.moveStart("character", start);
textRange.select();
}
}
現在我想做相反的事情。我想要獲取相對於某個元素的選擇範圍,特別是明確定義的start
和end
值。
我該如何使用setSelectionRange
中使用的類似方法來編寫相對於父元素的「getSelectionRange」方法,以便我可以使用這兩種方法來獲取/設置選擇範圍?
非常感謝Tim。 – Charles