Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery Get closest()返回未定义的A标记的Iframe_Javascript_Jquery_Iframe_Internet Explorer 8_Offset - Fatal编程技术网

Javascript Jquery Get closest()返回未定义的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

我在onmouseover调用javascript中的一个函数。在函数调用中,我包括srcElement(它是一个a-tag)。现在我需要得到a标签最近的Iframe的偏移网络宽度。但当我尝试这个:

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使用 .closest()是不必要的。
$(“html”).offset()
就足够了,而且性能更高。