2

こんにちは、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を使用しています..助けてください

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 に答える