【发布时间】:2014-10-01 07:34:57
【问题描述】:
下面是我的html代码:
<div id="text">This is <span class="ignore">some</span> short text.</div>
当我使用鼠标从“is”选择“short”时,通过使用以下在线找到的功能,
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
};
}
我将得到开始范围 = 5,结束范围 = 20。
但我希望范围计算忽略<span class="ignore">,这样我只得到开始范围= 5和结束范围= 14。
我在处理之前将文本复制到另一个虚拟 div,但似乎 window.getSelection() 只会得到原始的,有没有专家知道如何忽略 <span class="ignore"> 内的文本,所以我可以获得准确的范围?
【问题讨论】:
标签: javascript