2011-10-07 99 views
3

当你有这样一个页面通过所有的I帧的循环:如何访问iframe元素?

HTML:

<ul> 
    <li id="a"><iframe src="..." /></li> 
    <li id="b"><iframe src="..." /></li> 
    <li id="c"><iframe src="..." /></li> 
</ul> 

JS:

for (var i = 0; i < window.frames.length; i++) { 
     if (window.frames[i].getName() == selector) { 
      frame_item = ???? 
      break; 
     } 
    } 

我怎样才能为< IFRAME的DOM元素> ?或者按照这个例子,我如何获得循环内的< li>项的ID?

回答

5

已更新回答。

window.frames直接引用IFRAME上下文(iframe的窗口对象)。 AFAIK你不能通过这种方式获得IFRAME对象。您可以通过window.frames [0] .myVar访问IFRAME的变量。

要获得所有IFRAME节点/对象使用:

var iframes = document.getElementsByTagName('iframe'); //all iframes on page 
for(var i=0; i<iframes.length; i++){ 
    alert(iframes[i].parentNode.id); // LI.id 
    alert(iframes[i].contentWindow.myVar); //iframe's context 
} 

或者你可以分配ID来UL元素和

var ul = document.getElementById('ul_id'); 
var iframes = ul.getElementsByTagName('iframe'); //all iframes in UL 
... 
+0

window.frames [i] .parentNode未定义(Chrome) – Ivan

+0

对不起,我的不好。它直接引用iframe的上下文。查看更新的答案。 –

+0

亚历克斯托马斯同样的问题回答:我必须在子iframe上调用一个javascript函数。我不能相信子DOM结构或容器。 – Ivan

1

要使用jQuery从iframe中获取的元素:

$("iframe_id_or_class").contents().find(*element*)

更新

$("ul li").each(function(){ 
     $("iframe", this).contents().find(*element*); 
}); 
+1

JQuery的呢?好电话给我的朋友;) – Tules

+0

好吧,这是完美的,但这不是问题:)我需要从循环内访问帧上下文。 – Ivan

+0

检查更新,这是什么? – Alex

0

我会强烈建议您使用jQuery JavaScript库在一般编写JavaScript,因为它使整个事情更容易,但特别是选择器,因为你可以使用CSS选择器。 因此,在这种情况下,你会使用

var id = []; 

$("ul li").each(function(){ 
     id.push($(this).attr("id")); 
}); 

编辑

这是你需要什么?

$("iframe").each(
    function(){ 
     if($(this).attr("name")==desired_name) 
      alert($(this).parent()); 
    } 
); 
+1

我使用Jquery,但我已经简化了这里的问题到javascript纯代码:)这里的问题不是选择器,是在这个循环中获得ID。 – Ivan

+0

此循环将每个“li”的ID推入“id”数组 – Tules

+0

请参阅编辑,是吗? – Tules