Javascript Jquery Get closest()返回未定义的A标记的Iframe
我在onmouseover调用javascript中的一个函数。在函数调用中,我包括srcElement(它是一个a-tag)。现在我需要得到a标签最近的Iframe的偏移网络宽度。但当我尝试这个:Javascript Jquery Get closest()返回未定义的A标记的Iframe,javascript,jquery,iframe,internet-explorer-8,offset,Javascript,Jquery,Iframe,Internet Explorer 8,Offset,我在onmouseover调用javascript中的一个函数。在函数调用中,我包括srcElement(它是一个a-tag)。现在我需要得到a标签最近的Iframe的偏移网络宽度。但当我尝试这个: alert($(srcElement).closest('iframe').offset().left); 我没有定义!这也不起作用: alert($(srcElement).closest('iframe').attr('title')); 但这会起作用并返回iframe内的主体id: ale
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元素的宽度,但它不能精确到几像素…显然更好的是iframe的正确偏移量!
Iframe具有与原始页面相同的端口、协议和主机。我只需要它与InternetExplorer8一起工作。
非常感谢您的帮助
更新:在Felix Kling和scr4ve提出解决方案后,我发现我不能使用body元素或html元素的偏移量!因为两个偏移量都返回0,我假设Iframe元素是dom中唯一一个相对于文档具有正确偏移量的对象。有什么建议如何获得特定偏移量?According to,.Nestest()只考虑直系祖先。我猜您的iframe不是您的a标记的直接父级?请仔细查看有关的文档。
可能符合你的需要
顺便说一下,考虑使用COUNSOL.LoG而不是Actudio。
澄清后更新:
$(“html”).offset()在本例中效率更高,性能更强。框架中只有一个html标记,不需要.closest()
.OP可能也对/Height感兴趣。在对这个主题做了更多的研究之后,我找到了问题的解决方案,方法是基于这个stackoverflow问题中的Component_15939提供的解决方案:正如Felix Kling建议的那样,IFRAME在文档层次结构中不存在,因此我搜索所有IFRAME以寻找匹配项我的a标记的主体。我的最终代码如下所示:
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
}
}
var searchbody=$(srcmelement).closest('body');
var arrFrames=document.getElementsByTagName(“iframe”);
对于(i=0;我避免它)
}
}
希望这也能帮助其他人!问题是iframe
属于外部文档,而不是内部文档。iframe
不存在于内部文档层次结构中,html
始终位于顶部。直接祖先!==直接父级
。最终,整个文档都在内部ode>iframe
,因此人们可以将其视为文档中每个节点的祖先。我说的是
。你说的是
。我不太确定真正的问题是什么。是的。但是,从OP提到主体
元素的事实来看,我怀疑链接在iframe中。是的!Sry代表e延迟回复,但链接确实在iframe中。我需要遍历DOM树,直到该链接的最近iframe。这是我想要的特定iframe。现在我得到了最近的body元素的宽度,这是iframe的body元素,但正如所说的,它有一些px不准确。你是对的。OP使用$(“html”).offset()
就足够了,而且性能更高。