我在onmouseover的javascript中调用了一个函数。在函数调用中,我包含srcElement(它是一个a-tag)。现在我需要得到该a-tag最近的Iframe的offsetWidth。但是当我尝试这个时:
alert($(srcElement).closest('iframe').offset().left);
我未定义!这也不起作用:
alert($(srcElement).closest('iframe').attr('title'));
但这可以工作并返回iframe中身体的id:
alert($(srcElement).closest('body').attr('id'));
这是我在html中的函数调用:
showPeopleDetails('User_Matt', event.clientX, event.clientY, event.srcElement);
这是javascript函数:
function showPeopleDetailsNow(UserId, x, y, srcElement){
currentwidth = $(document).width();
currentheight = $(document).height();
adjustwidth = $(srcElement).closest('iframe').offset().left;
adjustheight = $(srcElement).closest('iframe').offset().top;
var calculatedheight = currentheight - adjustheight;
var calculatedwidth = currentwidth - adjustwidth;
现在我这样做,但这只适用于我页面的一部分。因为id是由框架动态生成的。
adjustwidth = parent.document.getElementById('ivuFrm_page0ivu0').contentWindow.document.getElementById('ivuFrm_page0ivu2').offsetWidth;
adjustheight = parent.document.getElementById('ivuFrm_page0ivu0').contentWindow.document.getElementById('ivuFrm_page0ivu2').offsetHeight;
有没有办法从body标签获取偏移量(并且它是iframe的正确偏移量?我知道我可以获得body-element的宽度,但是它不准确几个px ...显然,更好的是Iframe的正确偏移量! Iframe具有与原始页面相同的端口,协议和主机。我只需要它与Internet Explorer 8一起工作。 非常感谢帮助!
更新:经过Felix Kling和scr4ve提出的解决方案后,我发现我无法使用body元素或html元素的偏移量!由于两个偏移都返回0,我假设iframe元素是dom中唯一具有相对于文档的正确偏移量的对象。有关如何获得特定偏移的任何建议吗?
答案 0 :(得分:3)
在对这个主题做了一些更多的研究之后,我找到了解决问题的方法,基于在这个stackoverflow问题中由ingredient_15939提供的解决方案:Access Parent Iframe正如Felix Kling建议文档中不存在IFRAME层次结构,所以我在所有iframe中搜索我的标签的匹配主体。我的最终代码如下:
var searchbody = $(srcElement).closest('body');
var arrFrames = document.getElementsByTagName("iframe");
for(i = 0; i<arrFrames.length; i++){
//I search and compare every IFRAME to the closest body of my srcElement
try{
if(arrFrames[i].id != 'PeopleDetailsIframe'){
if($(arrFrames[i].contentWindow.document.body).is(searchbody)){
//The found IFrame has to be the one containing my a-tag
offsetwidth = $(arrFrames[i]).offset().left;
offsetheight = $(arrFrames[i]).offset().top;
}
else{
//console.log("Iframe not found");
}
}
}
catch(e){
//Iframe has security issues --> avoid it
}
}
希望这也可以帮助其他人!
答案 1 :(得分:0)
根据the docs,.closest()只考虑 直接祖先。我想你的iframe不是你的a-tag的直接父级?仔细查看Tree Traversal的文档。
.silbings()可能符合您的需求。
顺便说一句,考虑使用console.log而不是alert。
澄清后更新:在这种情况下,$("html").offset()
足够且性能更高。框架中只有一个html标签,不需要.closest()
。 OP也可能对.outerWidth() / Height感兴趣。