• JS如何获取并操作iframe中的元素?


    一、需求与遇到的问题

      在网站的后台管理中使用了iframe框架布局,包括顶部菜单、左侧导航和主页面。需求是:点击主页面上的一个按钮,在顶部菜单栏的右侧显示“退出”链接,点击可退出系统。

      我的思路是:在顶部的菜单页面放一个不可见的“退出”链接,当用户点击位于iframe中的主页面(mainPage.htm)中的按钮时,在顶部菜单页面的右侧显示“退出”。

      我现在遇到的问题是:如何在页面的一个iframe子页面(mainPage.htm)中获取并且操作其它iframe子页面(比如topPage.htm)中的HTML元素?

    二、通过JS获取并操作iframe中的元素来解决问题

      这里主要就是通过JS来操作Window对象。Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

      经过我在网上查资料,找到了JS操作iframe中HTML元素的方法。示例如下。

    1         function ShowExit() {
    2             //获取iframe的window对象
    3             var topWin = window.top.document.getElementById("topNav").contentWindow;
    4             //通过获取到的window对象操作HTML元素,这和普通页面一样
    5             topWin.document.getElementById("exit").style.visibility = "visible";
    6         }

      说明:第一步,通过window.top.document.getElementById("topNav")方法获取了顶部菜单页面(topPage.htm)所在的iframe对象;第二步,通过上一步获取到的iframe对象的contentWindow属性得到了iframe中元素所在的window对象;第三步,通过上一步获取到的window对象来操作iframe框架中的元素,这和操作不在iframe框架中的普通HTML元素是一样的。

      下面是我在重现以及解决这个问题时写的全部代码(布局太丑,但重点是JS方法):

      1.使用iframe框架布局的顶级页面(JS操作iframe中的元素.htm)

    View Code
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <title>JS操作iframe中的元素</title>
     5     <style type="text/css">
     6         #topDiv
     7         {
     8             width: 100%;
     9             height: 100px;
    10             background: #b6b6b6;
    11             border-top: 0px;
    12         }
    13         #topNav
    14         {
    15             width: 100%;
    16             border: 0px;
    17             margin-top: 45px;
    18         }
    19         #middleDiv
    20         {
    21             width: 100%;
    22             height: 360px;
    23             border-top: 10px solid #fff;
    24         }
    25         
    26         #leftNav
    27         {
    28             float: left;
    29             width: 10%;
    30             height: 360px;
    31             background: #b6b6b6;
    32             border: 0px;
    33         }
    34         
    35         #mainContent
    36         {
    37             float: right;
    38             height: 360px;
    39             width: 89%;
    40             border: 0px;
    41             margin-left: 10px;
    42         }
    43         
    44         #bottomDiv
    45         {
    46             width: 100%;
    47             float: left;
    48         }
    49         
    50         #bottomNav
    51         {
    52             clear: both;
    53             margin: 0;
    54             padding: 0;
    55             width: 100%;
    56             height: 46px;
    57             background: #b6b6b6;
    58             border: 0px;
    59             border-top: 10px solid #fff;
    60             border-bottom: 10px solid #fff;
    61         }
    62     </style>
    63 </head>
    64 <body>
    65     <div id="topDiv">
    66         <iframe id="topNav" src="topPage.htm"></iframe>
    67     </div>
    68     <div id="middleDiv">
    69         <div id="leftDiv">
    70             <iframe id="leftNav" src="LeftPage.htm"></iframe>
    71         </div>
    72         <div id="mainDiv">
    73             <iframe id="mainContent" src="mainPage.htm"></iframe>
    74         </div>
    75     </div>
    76     <div id="bottomDiv">
    77         <iframe id="bottomNav" src="bottomPage.htm"></iframe>
    78     </div>
    79 </body>
    80 </html>

      2.顶部菜单栏页面(topPage.htm)

    View Code
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <title>顶部导航</title>
     5     <style type="text/css">
     6         ul
     7         {
     8             list-style-type: none;
     9             float: left;
    10             padding: 0px;
    11             margin: 0px;
    12             width: 100%;
    13             text-align: center;
    14             margin: 0px auto;
    15         }
    16         a
    17         {
    18             text-decoration: none;
    19             color: White;
    20             background-color: Purple;
    21             border: 1px solid white;
    22             float: left;
    23             width: 7em;
    24             padding: 0.2em 0.6em;
    25             font-weight: bold;
    26         }
    27         a:hover
    28         {
    29             background-color: #ff3300;
    30         }
    31         li
    32         {
    33             display: inline;
    34         }
    35         #exit
    36         {
    37             float: right;
    38             visibility: hidden;
    39         }
    40     </style>
    41 </head>
    42 <body>
    43     <ul>
    44         <li><a href="#">文章管理</a></li>
    45         <li><a href="#">会员管理</a></li>
    46         <li><a href="#">系统管理</a></li>
    47         <li id="exit"><a href="#">退出</a></li>
    48     </ul>
    49 </body>
    50 </html>

      3.左侧导航栏(leftPage.htm)

    View Code
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <title>左侧导航</title>
     5     <style type="text/css">
     6         ul
     7         {
     8             list-style-type: none;
     9             float: left;
    10             margin: 5px;
    11             padding:5px;
    12         }
    13         a
    14         {
    15             text-decoration: none;
    16             color: White;
    17             background-color: Purple;
    18             border: 1px solid white;
    19             width: 7em;
    20             padding: 0.2em 0.6em;
    21             font-weight: bold;
    22         }
    23         a:hover
    24         {
    25             background-color: #ff3300;
    26         }
    27     </style>
    28 </head>
    29 <body>
    30     <div>
    31         <ul>
    32             <li><a href="#">栏目一 </a></li>
    33             <li><a href="#">栏目二</a></li>
    34             <li><a href="#">栏目三</a></li>
    35         </ul>
    36     </div>
    37 </body>
    38 </html>

      4.需要访问顶部菜单页面元素的主页面(mainPage.htm)

    View Code
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <title></title>
     5     <style type="text/css">
     6         body
     7         {
     8             background-color: #B9E5FB;
     9         }
    10     </style>
    11     <script type="text/javascript">
    12         function ShowExit() {
    13             //获取iframe的window对象
    14             var topWin = window.top.document.getElementById("topNav").contentWindow;
    15             //通过获取到的window对象操作HTML元素,这和普通页面一样
    16             topWin.document.getElementById("exit").style.visibility = "visible";
    17         }
    18     </script>
    19 </head>
    20 <body>
    21     <div>
    22         <input type="button" name="btnOk" value="在顶端显示退出" onclick="ShowExit();" />
    23     </div>
    24 </body>
    25 </html>

      5.底部页面(bottomPage.htm)

    View Code
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <title>底部页面</title>
     5 </head>
     6 <body>
     7     <div>
     8         底部版权区:这是一个底部的测试页面
     9     </div>
    10 </body>
    11 </html>

      参考资料:http://wenku.baidu.com/view/76d53a7b168884868762d6cb.html

             http://www.w3school.com.cn/htmldom/dom_obj_window.asp

  • 相关阅读:
    Linux下查找大文件以及目录
    Linux 下定时备份数据库以及删除缓存
    java中main方法的 (String []args)
    RabbitMQ消息队列(二):”Hello, World“
    maven 多模块项目
    java 接口的作用和好处
    Centos下使用压缩包安装MySQL5.7
    修复mysql:[ERROR] Native table ‘performance_schema’
    连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
    centos6下无法使用lsof命令"-bash: lsof: command not found"
  • 原文地址:https://www.cnblogs.com/sunyunh/p/2687056.html
Copyright © 2020-2023  润新知