Как найти положение XY в JavaScript со смещением

Привет, у меня есть проблемы с моим кодом JavaScript

я хочу получить xy положение выделенного текста в JavaScript, и я использую функцию офсайда, как это:

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.. пожалуйста, помогите мне

1 ответ

Вам нужно будет вставить фиктивный элемент на одном конце выделения. Вот функция для получения координат начала или конца выделения во всех основных браузерах, включая 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);
Другие вопросы по тегам