日期:2014-05-18  浏览次数:20474 次

JS高手请进-- Iframe内Html元素的控制。
(function(){
var arrEelements = document.getElementsByTagName('div');  
for (var i=0; i<arrEelements.length; i++)
{  
if (arrEelements[i].getAttribute('id')=='Div_Message')  

arrEelements[i].style.display='none'; 
}  
}
 })();

以上代码是在Html页面中隐藏一个DIV,直接写到Html页里可以顺利执行。
问题是:
这个Html页面是用JS写到Iframe内的页面。我在Iframe父页面写了如下代码,却无法正常执行。
(function(){
  var arrEelements = document.getElementsByTagName('iframe'); 
  for (var j=0; j<arrEelements.length; j++)
  { 
  if (arrEelements[j].getAttribute('name')=='Message_frame') 
  {
var ChildDoc = arrEelements[j].document;
var arrEelements = ChildDoc.getElementsByTagName('Div');  
for (var i=0; i<arrEelements.length; i++)
{  
if (arrEelements[i].getAttribute('id')=='Div_Message')  

arrEelements[i].style.display='none'; 
}  
}
   
  } 
  }
})();
望乞高手救命。兄弟这里谢过了。

------解决方案--------------------
1,首先不能跨域进行操作
2,name属性要严格注意大小写,id属性和name数学是不同的,不同混了

下面代码应该可以实现

JScript code
var fname = window.frames["Message_frame"]
var ChildDoc = fname.document; 
var arrEelements = ChildDoc.getElementsByTagName('DIV');   
for (var i=0; i <arrEelements.length; i++) 
{   
if (arrEelements[i].getAttribute('id')== 'Div_Message')   
{ 
arrEelements[i].style.display = 'none'; 
}   
}

------解决方案--------------------
其实你这部分
出现了如2楼说的跨域问题了
貌似```我概念不清晰```

我遇到你这类的问题
我是这么解决滴
不用IFRAME 用DIV
JS将原IFRAME中页面的内容全部加载到DIV中
那样等同于在同一个页面了
就不存在跨域了

友情提示
原IFRAME中页面内容要尽量精简(JS,CSS都可以写到外部的页面,去除出目标显示内容外的一切无关代码)
然后 这个属于了AJAX范围了
所以如果你调用原IFRAME内的JS的时候注意调用顺序(异步了嘛)
嘎嘎
我说完了 希望有用