节点位于多层iframe的最后一层里,通过var offset=$(obj).offset();var t=offset.top;var l=offset.left;可以获取obj节点在当前iframe里的位置,但是由于它位于多层iframe里,所以获取到的位置不是相对于浏览器的位置,怎么获取这个相对于浏览器的位置?
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; }
要不就只能一层一层的往外找了。
怎么获取节点所在的iframe对象?
@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;
  }
写个递归找到最顶层的iframe,再获取iframe的位置
怎么获取节点所在的iframe对象?
@心未鳴:
能知道一共有多少层吗
@心未鳴:
试试这个
   var obj;
        function GetTopParent() {
            obj = window.parent;
            if (obj != null) {
                GetTopParent();
            }
        }
        GetTopParent();
        var offset=$(obj).offset();
@Rich.T: 不确定 当成无限层吧
@Rich.T: 好像是死循环啊 直接卡死了
@心未鳴:
思路是这样的,你自己调调
@Rich.T: 这样获取父级iframe 但是当前iframe怎么知道是哪个呢?
@心未鳴:
找到了最父级的document,通过jquery来获取iframe,$("iframe")
我这问题解决了
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; }
@心未鳴:
这一坨坨代码,哪里看的懂啊
@log琥珀①: 不太会表达,下面回复说了下思路,希望能懂吧 我语文白学了
说下思路嘛
window.top获取最上级页面的window对象,然后从当前页面的window对象开始向上(window.parent)一层一层地找,直到最上级。每级页面所在iframe相对于父级页面最左端的距离累加,最后再加上控件距页面最左端距离,就是控件相对于浏览器最左端的距离了。
这是图:(别在意细节,画完后,我自己看得都笑了)
@心未鳴:
感谢,感谢
佩服,佩服