用jquery修复在iframe下的页面锚点失效问题

 更新时间:2014年08月22日 10:42:25   投稿:whsnow  
iframe页面没有滚动条,在父窗体中出现滚动条,锚点标记就会失效,用js判断页面是否被嵌套,用js计算iframe在父窗体位置

应用场景是:iframe页面没有滚动条,在父窗体中出现滚动条,锚点标记就会失效,因为,锚点是根据当前窗口滚动条滚动窗口的,成为子窗体后没有了滚动条,自然不会滚动。

解决办法是:用js判断页面是否被嵌套,用js计算iframe在父窗体位置,锚点在firame中的位置,两者相加成为父窗体的滚动。

遇到问题:获取父窗体元素(因为有域限制,所有需要在网络环境下方位(即http://domain.com));父窗体嵌套多个iframe,判断是否是当前iframe页面。

代码:

父窗体页面 index.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
border: 0;
}
html,
body{
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div style="width:100%;background:#f00;height:500px;"></div>
<a href="">dd</a>
<a href="">ddd</a>
<iframe name="iframe2" id="iframe2" src="iframe.html?a=b&c=d" style="width:100%;height:2060px;"></iframe>
<iframe name="iframe2" id="iframe2" src="iframe.html?a=d&c=b" style="width:100%;height:2060px;"></iframe>
</body>
</html>

子窗体页面iframe.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
a{
padding: 5px;
border: 1px solid #f00;
float: left;
display: block;
margin-right: 5px;
}
div{
width: 80%;
margin: 10px auto;
height: 500px;
border: 1px solid #f00;
font-size: 30px;
}
</style>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function(){
//如果是iframe则需要在网络中访问,因为js里有域限制
//如果没有iframe则不进行处理,
if(window!==window.top){
//获取top窗口中的iframe,如果有iframe嵌套过多,请自行修改
var iframeList=window.top.document.getElementsByTagName('iframe');
for(var i=0;i<iframeList.length;i++){
//判断当前窗口是否循环中的iframe
if(window.location.toString().indexOf(iframeList[i].getAttribute('src').toString())!=-1){

//等自己的所在iframe加载完成给a锚点加事件
window.top.document.getElementsByTagName('iframe')[i].onload=function(){
//确定iframe在父窗体的距顶部距离
var top = window.top.document.getElementsByTagName('iframe')[i].offsetTop;
$('a').each(function(){
var href = $(this).attr('href');
if(href.indexOf('#')!=-1){//判断是否是锚点而不是链接
var name = href.substring(href.indexOf('#')+1);
$(this).bind('click',function(){
$('a').each(function(){
if($(this).attr('name')==name){
//父窗口滚动
$(window.parent).scrollTop($(this).offset().top+top);
}
});
});
}
});
}
}
}
}

});

</script>
</head>
<body>
<a href="#a" rel="external nofollow" >a</a>
<a href="#b" rel="external nofollow" >b</a>
<a href="#c" rel="external nofollow" >c</a>
<a href="#d" rel="external nofollow" >d</a>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" a">A</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" b">B</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" c">C</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" d">D</a></div>

</body>
</html>

相关文章

  • jQuery中复合属性选择器用法实例

    jQuery中复合属性选择器用法实例

    这篇文章主要介绍了jQuery中复合属性选择器用法,实例分析了复合属性选择器匹配同时满足多个属性条件元素的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • 基于jQuery实现可编辑的表格

    基于jQuery实现可编辑的表格

    这篇文章主要为大家详细介绍了基于jQuery实现可编辑的表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • jquery.param()实现数组或对象的序列化方法

    jquery.param()实现数组或对象的序列化方法

    今天小编就为大家分享一篇jquery.param()实现数组或对象的序列化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • jquery中get和post的简单实例

    jquery中get和post的简单实例

    本篇文章主要是对jquery中get和post的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • Html5+jQuery+CSS制作相册小记录

    Html5+jQuery+CSS制作相册小记录

    这篇文章主要为大家详细介绍了Html5+jQuery+CSS制作相册小记录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 基于JQuery 选择器使用说明介绍

    基于JQuery 选择器使用说明介绍

    本篇文章小编为大家介绍,基于JQuery 选择器使用说明介绍。需要的朋友参考下
    2013-04-04
  • html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】

    html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】

    这篇文章主要介绍了html+jQuery实现拖动滑块图片拼图验证码插件,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • jQuery Validation Plugin验证插件手动验证

    jQuery Validation Plugin验证插件手动验证

    jquery.validate是jquery旗下的一个验证框架,借助jquery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,并且对国际化也有很好的支持,接下来通过本文给大家介绍jQuery Validation Plugin验证插件手动验证
    2016-01-01
  • jQuery实现简单下拉导航效果

    jQuery实现简单下拉导航效果

    这篇文章主要介绍了jQuery实现简单下拉导航效果,通过简单的元素遍历与样式替换实现下拉导航的功能,非常具有实用价值,需要的朋友可以参考下
    2015-09-09
  • jquery模拟按下回车实现代码

    jquery模拟按下回车实现代码

    今天要实现一个回车事件,一开始用了 js 的方法,怎么都不行,原来JQuery有点不同于JS的,而且比起JS简单多了
    2011-09-09

最新评论