节点位于多层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")
我这问题解决了
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相对于父级页面最左端的距离累加,最后再加上控件距页面最左端距离,就是控件相对于浏览器最左端的距离了。
这是图:(别在意细节,画完后,我自己看得都笑了)
@心未鳴:
感谢,感谢
佩服,佩服