本帖最后由 KFC123 于 2010-03-15 06:19:55 编辑

解决方案 »

  1.   

    do 
    {
      leftCo += txtnode.offsetLeft;
      topCo += txtnode.offsetTop;

    while (txtnode= txtnode.offsetParent);
    leftCo +=event.offsetX;
    topCo += event.offsetY;
      

  2.   

    謝謝回复。我這個段代碼是由 double click 事件触發的,我試了一下,但dblclick事件好像沒有傳入event這個object,請問怎樣取offsetX和offsetY?
      

  3.   

    var left,top;
    obj.onclick=function(){
    left=event.offsetX;
    top=event.offsetY;
    }
    obj.ondbclick=function(){
    leftCo +=left;
    topCo += top;
    }}
      

  4.   

    ondbclick --> ondblclick
      

  5.   

    請問這段代碼衹對IE有效嗎?為甚麼我在firefox上運行總不對?在firefox上代到document.addEventListener("click", function(e) { 
      xx = e.offsetX; 
      yy = e.offsetY; 
      alert(e + '  ' + xx + '   ' + yy);
    }, false);這裡 xx 和 yy 出來的是 undefined 為甚麼?
      

  6.   

    // IE
    if (document.all)
    {
    x = event.offsetX;
    y = event.offsetY;
    }else{//Firefox, Safari, Opera
    x = e.layerX;
    y = e.layerY;
    }
      

  7.   

    document.onclick=function(e){...} 也試過,還是不行。說 Component is not available。是不是上面的代碼不能用在greasemoneky 中?
      

  8.   

    太感謝了,這個代碼可以了,而且監察document的話,不用那個循環代碼而直接用layerX和layerY就可以了。衹是有一個問題,如果不是通過雙擊來選取文字,那麼 onclick就不會被觸發,這種情況下就無法獲得當前鼠標的位置了?
      

  9.   

    不好意思 shan1119,還是有問題。原來直接使用 layerX和layerY 還是不對的。把上面的代碼用到csdn.net上就可以看到,它跑到最上方去了。似乎還是要用到這段代碼do
    {
      leftCo += txtnode.offsetLeft;
      topCo += txtnode.offsetTop;
    }
    while (txtnode= txtnode.offsetParent);
    leftCo += event.layerX;
    topCo += event.layerY;這樣對 csdn.net 起作用,但總有一些網站會給出不正確的座標,例如,http://www.trans4mind.com/personal_development/JavaScript/Array2D.htm,看起這個問題處理起來很复雜。我是這樣想,是不是應該通過上面的 while 找出當前被 highlight 的文字的 parentnode 所在,然後計算相應的layerX和layerY相對於那個parentNode的距離?但是我監控的是document,怎樣將它的layerX, layerY計算出相對於某個parentNode的位置?
      

  10.   

    我再整理一下目前的問題,通過 document.onclick 方法得到的 layerX,layerY 代乎是相對於點擊時的鼠標下的 Node 而言的,而不是相對於 document.body 而言的。例如,我在一個 input 的第一個輸入位置上按下了鼠標,顯示出的layerX 是零,而在最後一個位置上點擊了鼠標則顯示input的輸入長度。這似乎說明layerX, layerY是相對座標。但是又奇怪,假設按下鼠標時對應的node是 <P></P> 則有些情況下,即使在這個<P>的第一個位置按下去,它卻給出一個非零的layerX。可是對<pre>衹要對在第一個文字位置上按下鼠標,不管這個<pre>位置那裡,它都給出layerX=0。這到底是怎麼回事?如果這 layerX, layerY 不確定,上面的代碼似乎就沒甚麼用了。
      

  11.   

    eg:<P>aaaaaaaa</P>
    layerX, layerY是相對</P>的左上的位置
    pageX,pageY是相對頁面的位置