2012-06-28 9 views
3

Вы можете получить узлы document объекта в с contentDocument свойством HTMLIFrameElementЯвляется ли отношение между <iframe> и его документом в одну сторону?

Но я не могу найти способ получить, что назад из узла.
Является ли отношение между и его документом только одним способом?
Если да, то ПОЧЕМУ?

A non working DEMO:

var iframe = document.getElementById('iframe'); 
var doc = iframe.contentDocument || iframe.contentWindow.document; 

var div = doc.getElementsByTagName('div')[0]; 

console.log('Did we find the iframe? ' + ($(div).closest('iframe').length > 0));​ 
// Output: "Did we find the iframe? false" 
+0

вы должны быть в состоянии получить div. почему вы ищете его таким образом? почему бы просто не получить его напрямую? – FlavorScape

+0

Я не думаю, что у документа есть какая-либо информация о том, что его содержит. Вам нужно будет зайти в окно для этой информации, которая не обрабатывается jQuery. Документ внутри iframe является полностью отдельным DOM, вы не можете переходить от одного к другому, используя только jQuery. –

+0

На самом деле, да, вы можете переходить от одного к другому, но для этого требуются такие методы, как .contents(), который является односторонним. –

ответ

5

Элемент iframe находится в другом document (это элемент на главной странице), чем элемент div (это элемент на странице iframe).

Вы можете получить iframe элемент вроде этого:

iframe.contentWindow.frameElement === iframe

или когда внутри среды iframe сценария:

window.frameElement

Или используя div

div.ownerDocument.defaultView.frameElement === iframe

Updated demo

+0

+1, когда я встал с постели этим утром, я не знал, как получить родительский объект 'document' или' window' из элемент; теперь я делаю. – apsillers

0

вещь для (div) в console.log линии, они являются частью рамы, они не знают, что они находятся в кадре так .closest('iframe') будет пустым.

+0

В принципе, div не является частью документа, в котором содержится iframe. –

 Смежные вопросы

  • Нет связанных вопросов^_^