2009-11-27 9 views
15

tak muszę 2 ramki, i mieć dostęp do elementu z jednej ramy na inną:JavaScript document.getElementById w innych ramkach

rama 1:

<div id='someId'>...</div> 

ramka 2:

var div=document.getElementById('someId'); 

div.innerHTML='something'; 

to nie działa w Firefoksie, więc chcę mieć pewność, czy mogę uzyskać dostęp do elementu w innej ramce poprzez jego identyfikator?

Odpowiedz

20

Można odwołać drugą ramkę za pomocą

window.frames["framename"] 

a następnie można skierować element DOM za pomocą

window.frames["framename"].document.getElementById ("yourelementid"); 
+0

tak, to nie ma opcji, że przeglądarka znajdzie pierwszą dostępną elementu z żądanym ID bez względu na to, w którym rama rezydujących? –

+3

@as: 'getElementByid' ogranicza się do szukania w obiekcie' document', którego jest metodą. Należy pamiętać, że ramka jest w rzeczywistości oddzielnym obiektem 'window', a badanie hierarchii' window'-> 'document' powinno wyjaśnić, dlaczego metoda na jednym' dokumencie' nie może zbadać 'dokumentu' w inny "okno". – NickFitz

+5

To nie jest wirowanie w chrome, 'window.frames ['framename']. Document' nie zawiera w sobie nic. Mam na myśli 'windows.franes ['framename']. Ducumnet.getElementById (...) ...' wyniki 'Uncaught TypeError: Nie można wywołać metody 'getElementByName' błędu undefined'. –

12

Problem ten może być obecny rama jesteś. Jeśli window.frames['framename'] nie działa, spróbuj parent.frames['framename'], aby uzyskać dostęp do ramek najwyższego poziomu.

if(parent.frames && parent.frames['framename']) { 
    var elem = parent.frames['framename'].document.getElementById(...); 
    // etc 
} 
+0

pracował dla mnie! Dzięki! – thsieh

1

miałem problem z wersją JS ale był w stanie wykorzystać te przykłady dla sprawnego wersji jQuery:

var obj = $('#yourelementid', parent.frames["framename"].document); 
0

Albo, jeśli masz ochotę spróbować swojego szczęścia, można po prostu użyć parametr numeryczny.

window.frames[0].document

Powiązane problemy