2012-01-08 2 views
15

Я пытаюсь получить доступ к элементу, который находится внутри фрейма, но до сих пор ему не удавалось добраться до него. Я прочитал много примеров здесь, в stackoverflow и документации jQuery, но все примеры, которые я видел, относятся к iFrames, которые ведут себя не так, как традиционные. Моя страница структура, как показано ниже, с фактическим содержанием удалено:Получение элемента внутри рамки с помощью jQuery

<html> 
<head></head> 
<frameset> 
<frame name="Menu"><html><body> 
    <!--Menu contents--> 
</body></html></frame> 

<frameset> 
<frame name="SettingsTree"><html><body> 
    <!--Setting options--> 
</body></html></frame> 
<frame name="SettingsGrid" id="SettingsGrid"><html><body> 
    <div id="findthis"></div> 
    <!--Setting grid values--> 
</body></html></frame> 
</frameset> 

</frameset> 
</html> 

Способ получить содержимое «findthis» в плавающем фрейме будет

$('#SettingsGrid').contents().find('#findthis') 

однако это ничего не возвращает. Объект $ ('# SettingsGrid') существует с длиной 1 и всем html, который я ожидал бы от него. Однако, когда я вызываю .contents() на этом объекте, он ничего не возвращает. Я не знаю, связано ли это с тем, что он не был должным образом загружен в DOM или если есть какая-то другая проблема.

ответ

0

Вы пытались $('#findthis', $('#SettingsGrid'))?

Второй аргумент во внешнем jquery - это контекст, в котором делается поиск, на который ссылается первый аргумент. Если второй аргумент не задан, он по умолчанию является корневым.

+0

Я думал, что это сработает, потому что если вы в контексте SettingsGrid можете найти этот элемент, но, возможно, потерпеть неудачу. Спасибо за эту идею. –

+1

Это не работает, по крайней мере, с iframe. – Sire

1

Это работало для меня, если кадр имеет имя, а также идентификатор:

$('#frame_id',top.frames["frame_name"].document) ... 
1

Мои лучшее рабочее решение в режиме IE8/IE11 Enterprise с jQuery 1.11.1:

$('#findthis', $('#SettingsGrid')[0].contentWindow.document) 
0

Для меня хороший способ сделать это - найти кадр по классу, а не использовать метод jquery`s prop() и contentwindow. К сожалению, этот фрейм должен быть объявлен некоторой функцией, которая выполняет задачи для вас, например. findAndsubmitForms().

родительское окно:

$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms(); 

дочернего окна (рама):

function findAndSubmitForms(){ 
    $('form').submit(); 
    } 

Если это не представляется возможным объявить такой метод внутри кадра это, конечно, можно было бы сделать, определив его следующим образом:

$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...}; 

и чем назвать нашу желаемую функцию: D

приятный день и желаем вам прекрасного просмотра на экране: D

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