Javascript 获取文本范围的偏移量
有人能告诉我为什么此代码返回未定义的Javascript 获取文本范围的偏移量,javascript,textrange,Javascript,Textrange,有人能告诉我为什么此代码返回未定义的吗 我希望这会给出用户选择文本的左坐标 function alertRangeObject(){ var userSelection; if(window.getSelection) { userSelection = window.getSelection(); } else if (document.selection) { userSelection = document.selecti
吗
我希望这会给出用户选择文本的左坐标
function alertRangeObject(){
var userSelection;
if(window.getSelection)
{
userSelection = window.getSelection();
}
else if (document.selection)
{
userSelection = document.selection.createRange();
}
var selectedText = userSelection;
if (userSelection.text)
{
selectedText = userSelection.text;
}
var rangeObject = getRangeObject(userSelection);
function getRangeObject(selectionObject)
{
if (selectionObject.getRangeAt)
return selectionObject.getRangeAt(0);
else { //safari
var range = document.createRange();
range.setStart(selectionObject.anchorNode, selectionObject.anchorOffset);
range.setEnd(SelectionObject.focusNode, selectionObject.focusOffset);
return range;
}
}
alert(rangeObject.offsetLeft);
}
令人沮丧的是,当您警报(rangeObject)
我收到所选文本时。但是我想如果这是一个文本范围,我可以使用offsetLeft
方法来获得左坐标。谁能看出我做错了什么。
谢谢。TextRange
对象确实有offsetLeft
和offsetTop
属性,但是您发布的代码将在IE<9中抛出错误,因为getRangeObject()
函数返回未定义的。我建议使用其他代码。以下内容将获得IE>=4和支持的其他浏览器的最新版本中相对于视口的选择的左上角坐标,并在其他浏览器中返回(0,0)
jsFiddle:
代码:
目前,我正在开发一个范围/选择位置模块,该模块使用了与上述类似的方法。这是一项正在进行的工作,但在大多数场景和浏览器中都能很好地工作。它应该成为1.3版。此处演示:
另一方面,这段代码看起来像是基于PPK在quirksmode上的代码。它已经过时,代码混乱且不理想,但在不久的将来应该会有一些改进。您可以使用它来获取有关所选范围的所有信息。谢谢Tim,我确实使用了“范围介绍页面”。谢谢你的提醒。我要花一段时间熟悉兰吉。另外,感谢上面的代码。Blink和Webkit从不让我感到惊讶。在contentEditable元素中测试时,当范围折叠时,它们返回rect0,0,0,0
。这两台发动机肯定总有问题;>
function getSelectionTopLeft() {
var x = 0, y = 0;
// Use standards-based method only if Range has getBoundingClientRect
if (window.getSelection && document.createRange
&& typeof document.createRange().getBoundingClientRect != "undefined") {
var sel = window.getSelection();
if (sel.rangeCount > 0) {
var rect = sel.getRangeAt(0).getBoundingClientRect();
x = rect.left;
y = rect.top;
}
} else if (document.selection && document.selection.type != "Control") {
// All versions of IE
var textRange = document.selection.createRange();
x = textRange.boundingLeft;
y = textRange.boundingTop;
}
return { x: x, y: y };
}