看例子,两个文件如下:
a.html:<iframe name="HtmlEdit" ID="HtmlEdit" MARGINHEIGHT="1" MARGINWIDTH="1" width="100%" height="321" src="b.htm" ></iframe>
<input type="button" id="d3" name="d3" value="Iframe值" onClick="submit1A()">
 
<input type="button" id="tt" name="tt" value="文本值" onClick="submit1B()">
<script language="javascript">
function submit1A(){
if (document.all){//IE
 doc = document.frames["HtmlEdit"].document.body.innerHTML;
}else{//Firefox   
 doc = document.getElementById("HtmlEdit").contentDocument.documentElement.innerHTML;
}
alert(doc);  
}
function submit1B(){
if (document.all){//IE
 doc = document.frames["HtmlEdit"].document.getElementById("tt").value;
}else{//Firefox   
 doc = document.getElementById("HtmlEdit").contentDocument.getElementById("tt").value;
}
alert(doc);  
}
</script>b.html:
<table border="0" cellspacing="0" cellpadding="0" id="idTable">   
  <tr><td>   
  <input type="text" id="tt" name="tt" value="1" />   
  <input type="text" value="2"/></td></tr>   
</table>
在FF下改变b.html的第一个text的值为:13。
点击按钮“文本值”可以取到13。
再点按钮“Iframe值”发现第一个text的值还是的,不是现在的13。为什么。

解决方案 »

  1.   

    虽然页面上的值改变了,但是获取的innerHTML代码还是原始的html代码
    你并没有改变dom元素。只是改变了在文本域中写入了值<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>a.html</title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
         window.onload = function () {
         alert(document.body.innerHTML);//首次获取body的code,value=abc
         document.getElementById("test").value = 10;
         alert(document.body.innerHTML);//赋值后获取body的code,value=abc 实际是10
         document.getElementById("test").removeAttribute("value");
         document.getElementById("test").setAttribute("value", "zxy");//value=10,实际是zxy
         alert(document.getElementById("test").value);
         document.getElementById("test").value = "dvd";
         alert(document.body.innerHTML);//获取改变dom后的body的code,事件是dvd,输出html的value=zxy
         //document.getElementById("test").value可以完成页面动态赋值,但是没有改变dom中的元素
         //在改变dom的情况下,可以动态改变html但没有改变页面上的值
         document.body.innerHTML= '<input type="text" value="zxy" id="test"/>';
         //innerHTML可以动态改变对dom和完成页面赋值效果
         var t = document.createElement("input");
         t.type = "text";
         t.setAttribute("value", "success");
         document.body.appendChild(t);
         alert(document.body.innerHTML);//也可以动态的改变页面上显示的值和dom元素
         };
        </script>  </head>
      
      <body>
        <input type="text" value="abc" id="test"/>
      </body>
    </html>
      

  2.   

    貌似在FF下是这样的,IE下没有问题。FF这方面处理的比较另类。动态改了iframe内页的东西,获取的还是老的值~~~匪夷所思的逻辑
      

  3.   

    谢谢 IBM_hoojo, 讲得很详细呀。
    差点就测试到这上步了。要是iframe里太多的input控件和内容,
    还没法赋值给父窗口中的变量或textarea控件。
      

  4.   

    楼上正解!
    虽然input的value改变了,但是获取的innerHTML代码还是原始的html代码
      

  5.   

    直接改写对应节点的innerHTML可以达到目的
    document.getElementById("HtmlEdit").contentWindow.document.getElementById("..").innerHTML=...;
      

  6.   

    看来只有在每input控件中加个事件: onblur="this.setAttribute('value',this.value)"  。大家看可行?
      

  7.   

    to:Wilson_Zhong
    iframe里太多控件。似乎没法这样搞:
    document.getElementById("HtmlEdit").contentWindow.document.getElementById("..").innerHTML=...;
      

  8.   


    好像效果不佳,应该没改变html的value吧
    onblur="this.setAttribute('value',this.value);alert(document.body.innerHTML);" 
      

  9.   

    iframe里太多控件。 
    改变html的value好难哦。
      

  10.   

    不仅仅是iframe内页这种情况,就是一个页面上,你把某个元素的值改变了,获取body的时候,还是老样子,他貌似只认识第一次的,以后的动态改变,他不会认识。比较笨