ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

document.getElementById('myframe')和window.frames[i]的区别

2021-07-22 17:36:09  阅读:139  来源: 互联网

标签:src getElementById window iframe frames document


document.getElementById('myframe')和window.frames[i]的区别

window.frames["main"].document.getElementById("btnQuery").click();
            //==this.ownerDocument.getElementById("main").contentWindow.document.getElementById("btnQuery")
            //document.getElementById("main").contentWindow.document.getElementById("btnQuery")

1、IE专用(通过frames索引形象定位): document.frames[i].document.getElementById('元素的ID');

2、IE专用(通过IFRAME名称形象定位): document.frames['iframe的name'].document.getElementById('元素的ID');

以上方法,不仅对IFRAME适用,对FRAMESET里的FRAME也同样适用。IE虽然擅于自定标准,但不得不说它很多的设计还是比较体现人性化的。比如这个,它在同样支持下面的标准路径之外,提供了一个简洁且形象化的写法。

3、通用方法: document.getElementById('iframe的ID').contentWindow.document.getElementById('元素的ID')

注意要加上contentWindow,往往出现问题都是因为这个容易被忽略,它代表FRAME和IFRAME内部的窗口对象。

但是,很明显,这种写法非常要命,太长了。如果要操作一系列里面的元素,这样写起来,实在够受的,就算用复制粘贴大法,眼睛看起来也是个问题。


 

 

问题:使用window.frames[0].src怎么都获取不到url地址,而用$("#frame1").attr("src")却可以

原因如下:

在DOM文档对象模型中,window对象处于最高层,而框架除了是当前窗体的一个节点外,本身也是一个独立window对象, 当frames作为window对象时,有name属性,而没有src属性,只有作为节点时才有src属性, 也就是说window.frames[0]这种写法代表一个window对象,所以window.frames[0].src 当然是undefined了 ,这也是很多人容易混淆的原因!

若要获得src属性,可以这样写:document.getElementById(frame_id).src  //节点对象

 

  1.   <html>
  2.   <head>
  3.   <title>differences</title>
  4.   </head>
  5.   <body>
  6.   <iframe id="myframe" src="http://www.baidu.com" height=400 width=400></iframe>
  7.   </body>
  8.   <script type="text/javascript">
  9.   document.body.onload = function(){
  10.   //这种写法没问题
  11.   //document.getElementById('myframe').src = 'http://www.google.com';
  12.   //这种写法会出错
  13.   //document.getElementById('myframe').location.href='http://www.google.com';
  14.   //这种写法可行
  15.   //window.frames[0].location.href='http://www.google.com';
  16.   //这种会有permission denied错误。
  17.   //window.frames[0].src='http://www.google.com';
  18.   }
  19.   </script>
  20.   </html>

 

var obj = document.getElementById(“iframe”);//获取对象

var dom = document.all.frames[“iframe”];//获取DOM

一个是对象 一个是DOM.

如果只想改变iframe的 src 或者 border ,scrolling 等attributes(与property不是一个概念,property是不能写在标签内的,比如:scrollHeight,nnerHTML等),就需要用到第一种方法。

如果想取得iframe的页面(不是iframe本身)。就需要使用第二种方法,因为它取得的是一个完整的DOM模型,比如想得到iframe的document.body的内容,就只能用第二种方法

另:document.getElementById取到的iframe是不能直接操作里面的document的,只能这样取:

在IE为是frames[id].document或document.getElementById(id).contentWindow.document; 

标签:src,getElementById,window,iframe,frames,document
来源: https://www.cnblogs.com/ioriwellings/p/15045242.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有