2011-10-07 104 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