Получение элемента во фрейме с использованием jQuery - PullRequest
18 голосов
/ 08 января 2012

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

<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" в пределах iFrame будет

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

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

Ответы [ 5 ]

41 голосов
/ 08 января 2012

Попробуйте:

$('#findthis', window.parent.frames[0].document)

Или с верхнего уровня:

$('#findthis', top.window.frames[0].document)

См. Предыдущий вопрос / ответ: Запустите JQuery в контексте другого фрейма

1 голос
/ 14 июля 2015

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

$('#findthis', $('#SettingsGrid')[0].contentWindow.document)
1 голос
/ 19 февраля 2013

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

$('#frame_id',top.frames["frame_name"].document) ...
0 голосов
/ 08 февраля 2018

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

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

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

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

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

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

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

, а затем вызвать нашу желаемую функцию: d

хорошего дня и желаю вам прекрасно провести время, глядя на экран: D

0 голосов
/ 08 января 2012

Вы пробовали $('#findthis', $('#SettingsGrid'))?

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

...