使用父元素中的javascript计算用户选择的开始和结束位置
Calculate the start and end position of user selection using javascript from a parent element
我正在寻找一种方法来计算用户从已知父元素中选择的开始和结束位置。我在FF工作时遇到了一些轻微的修改,但我不确定如何在IE中做到这一点,如果我的修改合适,我很想得到一些想法。非常感谢Tim Down给出的原始答案。
function getBodyTextOffset(node, offset) {
var sel = window.getSelection();
var range = document.createRange();
range.selectNodeContents(document.getElementById('test'));
range.setEnd(node, offset);
sel.removeAllRanges();
sel.addRange(range);
return sel.toString().length;
}
function getSelectionOffsets() {
var sel, range;
var start = 0, end = 0;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(sel.rangeCount - 1);
start = getBodyTextOffset(range.startContainer, range.startOffset);
end = getBodyTextOffset(range.endContainer, range.endOffset);
sel.removeAllRanges();
sel.addRange(range);
alert(start + ", " + end);
}
} else if (document.selection) {
// IE stuff here
}
return {
start: start,
end: end
};
}
我知道这已经有一段时间了,但这里有一个JSFiddle展示了这个想法。同样,它适用于FF和Chrome,但不适用于IE9。理想情况下,我希望能够从元素测试开始就获得偏移量。
JavaScript范围是一个痛苦的话题,尽管这里有一些好的资源。。。
以下是一些可以作为参考的演示。。。
http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html
一个模糊但体面的起点,以了解哪些方法和属性可用。。。http://help.dottoro.com/ljxsqnoi.php
您可以使用以下JavaScript来发现包含什么。。。
for (i in window.getSelection()) {alert('i = '+i);}
当您看到提到的对象时,您可以将其附加,只需确保您知道也要为方法使用括号,并且在极少数情况下使用参数,如下面的参数。。。
for (i in window.getSelection().getRangeAt(0)) {alert('i = '+i);}
此外,Gecko浏览器(如Firefox)中还有一个非常严重的范围错误,如果你将鼠标稍微移到一个元素之外,但不到字母/字符的50%,那么Gecko会错误地将边界元素设置为该元素,即使它没有被选中。只是想弄清楚它是什么,Mozilla实际上拒绝修复它(就像他们处理了许多其他错误一样),这是我发布的错误帖子的链接。。。
https://bugzilla.mozilla.org/show_bug.cgi?id=696571
希望这能让你朝着正确的方向前进。
- 从第一个日期选择器定义第二个日期选择器的开始日期
- D3选择html——传递函数时,索引从1开始,而不是从0开始
- 在选择开始日期后设置结束日期
- 使 URL 开始选择下拉列表
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 结束日期作为基础日期时间选择器中的选定开始日期
- 剑道日期选择器选择日期应从年开始
- 使用JQuery的图像滑块不显示我选择的下一个图像,而是从头开始显示
- 角度引导日期选择器开始日期函数
- 如何从开始日期中的单独字段添加天数/周,以在日期选择器中获取结束日期
- 通过选择从开始日期算起的周数或月数来自动结束日期
- 如何获得 Div 选择开始和选择结束 Firefox 和 GHROOM
- 具有自定义开始日期的日期选择器
- 是否有一个js事件在选择开始时被触发
- 如何区分拖动开始和选择开始HTML5画布
- Bootstrap daterangpicker选择开始日期+ 30天作为maxDate
- 将html标记添加到文本区域中的选定文本.为什么“;如果(文本区域中的“选择开始”)“;需要在那里
- 设置“选择开始”和“选择结束”
- 我想要一个引导时间选择器从下拉列表中选择开始时间,其中持续时间间隔为30分钟
- 是否有 Internet Explorer 批准的替代选择开始和选择结束