首页 新闻 会员 周边

如何获取节点在网页上的当前位置?

0
悬赏园豆:5 [已解决问题] 解决于 2013-01-11 14:43

节点位于多层iframe的最后一层里,通过var offset=$(obj).offset();var t=offset.top;var l=offset.left;可以获取obj节点在当前iframe里的位置,但是由于它位于多层iframe里,所以获取到的位置不是相对于浏览器的位置,怎么获取这个相对于浏览器的位置?

心未鳴的主页 心未鳴 | 菜鸟二级 | 园豆:223
提问于:2013-01-10 09:25
< >
分享
最佳答案
0
function getThisIframe(w,wp){
            var ifr;
            $(wp.document).find("iframe").each(function(i5,o5){
                if(o5.contentWindow==w){
                    ifr=o5;
                    return false;
                }
            });
            return ifr;
        }
        function getOffset(jO){
            var of=jO.offset();
            var wt=window.top;
            var w=window;
            if(w!=wt){
                var wp=window.parent;
                while(wp!=wt){
                    var ifr=getThisIframe(w,wp);
                    var _of;
                    if(ifr){
                        _of=$(ifr).offset();
                    }else{
                        _of=new Object();
                        _of.top=0;
                        _of.left=0;
                    }
                    of.top+=_of.top;
                    of.left+=_of.left;
                    w=wp;
                    wp=w.parent;
                }
            }
            return of;
        }
心未鳴 | 菜鸟二级 |园豆:223 | 2013-01-11 14:42
其他回答(3)
0

要不就只能一层一层的往外找了。

收获园豆:2
chenping2008 | 园豆:9836 (大侠五级) | 2013-01-10 09:31

怎么获取节点所在的iframe对象?

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-10 09:44

@chenping2008: 


  function getThisIframe(w,wp){
   var ifr;
   $(wp.document).find("iframe").each(function(i5,o5){
    if(o5.contentWindow==w){
     ifr=o5;
     return false;
    }
   });
   return ifr;
  }
  function getOffset(jO){
   var of=jO.offset();
   var wt=window.top;
   var w=window;
   if(w!=wt){
    var wp=window.parent;
    while(wp!=wt){
     var ifr=getThisIframe(w,wp);
     var _of;
     if(ifr){
      _of=$(ifr).offset();
     }else{
      _of=new Object();
      _of.top=0;
      _of.left=0;
     }
     of.top+=_of.top;
     of.left+=_of.left;
     w=wp;
     wp=w.parent;
    }
   }
   return of;
  }

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-11 14:38
0

写个递归找到最顶层的iframe,再获取iframe的位置

收获园豆:3
Rich.T | 园豆:3440 (老鸟四级) | 2013-01-10 09:31

怎么获取节点所在的iframe对象?

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-10 09:44

@心未鳴: 

能知道一共有多少层吗

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2013-01-10 09:55

@心未鳴: 

试试这个

   var obj;
        function GetTopParent() {
            obj = window.parent;
            if (obj != null) {
                GetTopParent();
            }
        }
        GetTopParent();
        var offset=$(obj).offset();

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2013-01-10 09:55

@Rich.T: 不确定 当成无限层吧

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-10 09:56

@Rich.T: 好像是死循环啊 直接卡死了

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-10 10:17

@心未鳴: 

思路是这样的,你自己调调

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2013-01-10 10:19

@Rich.T: 这样获取父级iframe 但是当前iframe怎么知道是哪个呢?

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-10 10:26

@心未鳴: 

找到了最父级的document,通过jquery来获取iframe,$("iframe")

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2013-01-10 10:28

我这问题解决了

View Code
        function getThisIframe(w,wp){
            var ifr;
            $(wp.document).find("iframe").each(function(i5,o5){
                if(o5.contentWindow==w){
                    ifr=o5;
                    return false;
                }
            });
            return ifr;
        }
        function getOffset(jO){
            var of=jO.offset();
            var wt=window.top;
            var w=window;
            if(w!=wt){
                var wp=window.parent;
                while(wp!=wt){
                    var ifr=getThisIframe(w,wp);
                    var _of;
                    if(ifr){
                        _of=$(ifr).offset();
                    }else{
                        _of=new Object();
                        _of.top=0;
                        _of.left=0;
                    }
                    of.top+=_of.top;
                    of.left+=_of.left;
                    w=wp;
                    wp=w.parent;
                }
            }
            return of;
        }
支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-01-11 14:40

@心未鳴: 

这一坨坨代码,哪里看的懂啊

支持(0) 反对(0) log琥珀① | 园豆:58 (初学一级) | 2013-03-04 14:07

@log琥珀①: 不太会表达,下面回复说了下思路,希望能懂吧 我语文白学了

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-03-06 16:57
0

说下思路嘛

log琥珀① | 园豆:58 (初学一级) | 2013-03-04 14:06

window.top获取最上级页面的window对象,然后从当前页面的window对象开始向上(window.parent)一层一层地找,直到最上级。每级页面所在iframe相对于父级页面最左端的距离累加,最后再加上控件距页面最左端距离,就是控件相对于浏览器最左端的距离了。

 

这是图:(别在意细节,画完后,我自己看得都笑了)

http://r.photo.store.qq.com/psb?/b4aba55c-de8c-4e9b-9aa2-0164815e7f5c/Qa1Ew7wslcxwPceSxVfac8Xl.rv7vvOgdz*qcWH1Ss4!/o/dC*xVEkpEgAA&bo=IAOoAR0FHQUBAK0!

支持(0) 反对(0) 心未鳴 | 园豆:223 (菜鸟二级) | 2013-03-06 16:55

@心未鳴:

感谢,感谢

佩服,佩服

支持(0) 反对(0) log琥珀① | 园豆:58 (初学一级) | 2013-03-14 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册