2

你好我的javascript代码有问题..

我想在 javascript 中获取所选文本的 xy 位置,并且我使用这样的越位函数:

function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }

但是当我调用此函数查找位置选定文本时,位置 X,Y 的结果始终为 0

var select = window.getSelection();

var posX = findPosX(select);
var posY = findPosY(select);

我使用 Mozilla firefox .. 请帮帮我

4

1 回答 1

2

您需要在选择的一端插入一个虚拟元素。这是一个获取所有主要浏览器(包括 IE 6)中选择的开始或结束坐标的函数。请注意,这需要支持getBoundingClientRect()元素的方法,这排除了 Firefox 2。如果您需要支持该浏览器,您可以在虚拟元素上使用类似你的findPosX/Y函数的东西,而不是getBoundingClientRect().

function getSelectionCoordinates(start) {
    var x = 0, y = 0, range;
    if (window.getSelection) {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(sel.rangeCount - 1);
            range.collapse(start);
            var dummy = document.createElement("span");
            range.insertNode(dummy);
            var rect = dummy.getBoundingClientRect();
            x = rect.left;
            y = rect.top;
            dummy.parentNode.removeChild(dummy);
        }
    } else if (document.selection && document.selection.type != "Control") {
        range = document.selection.createRange();
        range.collapse(start);
        x = range.boundingLeft;
        y = range.boundingTop;
    }
    return {x: x, y: y};
}

var coords = getSelectionCoordinates(true);
alert(coords.x + ", " + coords.y);
于 2010-11-08T11:44:25.307 回答