Получение элемента в кадре с помощью jQuery

Я пытаюсь получить доступ к элементу, который находится внутри фрейма, но до сих пор ему не удавалось добраться до него. Я прочитал много примеров здесь, в 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 или если есть другие проблемы.

Ответы

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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