getElementsByTagName ( 'а'); не работает? - PullRequest
6 голосов
/ 20 февраля 2012

Итак, я делаю это:

var stuff = document.getElementsByTagName('iframe');

Работает нормально. Тогда я хочу сделать это:

var other = stuff.getElementsByTagName('a');

но это не работает. Это в конечном итоге быть неопределенным. Я могу сделать:

var other = document.getElementsByTagName('a');

и это нормально. Разве я не смогу получить все «а» в «ифраме»?

Редактировать: Таким образом, я не владею iframe, и теперь у меня сложилось впечатление, что я не могу получить доступ к чему-либо, что генерирует iframe, что означает, я думаю, я облажался.

Ответы [ 5 ]

10 голосов
/ 20 февраля 2012

использование ..

var iframe = document.getElementsByTagName('iframe')[0],
    iframeDoc = iframe.contentWindow.document;

Спецификация .

Затем вы можете позвонить getElementsByTagName('a') на iframeDoc. Кроме того, вы можете получить доступ к iframeDoc.links, что не совсем то же самое, но может быть тем, что вы хотите.

Конечно, все это зависит от того, что iframe document не нарушает Политика аналогичного происхождения .

4 голосов
/ 20 февраля 2012

getElementsByTagName() возвращает NodeList, который вам нужно будет перебрать.Чтобы перебрать его, вы можете выполнить:

for (var i = 0; i < stuff.length; i++) {   
    var other = stuff[i].getElementsByTagName('a');
}  

Однако getElementsByTagName('a') запрашивает дочерние элементы в текущем документе, что почти наверняка не то, что вы хотите.Если вы хотите, чтобы дочерние элементы находились внутри документа во фрейме, вам нужно будет выполнить:

for (var i = 0; i < stuff.length; i++) {   
    var other = stuff[i].contentWindow.document.getElementsByTagName('a');
}  

Это будет работать, если у вас несколько фреймов, и в более старых версиях IE.

3 голосов
/ 20 февраля 2012
stuff[0].contentWindow.document.getElementsByTagName('a')

должен создать массивоподобный объект, содержащий все ссылки в нулевом фрейме.

Вам необходимо использовать contentWindow.document, поскольку <iframe> не содержит никаких узлов в текущем документе - это фрейм, свойство contentWindow которого указывает на другое окно с собственным документом.

2 голосов
/ 20 февраля 2012

getElementsByTagName возвращает массив совпадающих элементов. Чтобы получить доступ к отдельному IFRAME, вы должны использовать, например, stuff[0].

0 голосов
/ 22 марта 2012

Почему все предлагают contentWindow.document, когда вы можете просто использовать contentDocument вместо?

Конечно, оба работают, но я предпочитаю использовать то, что имею в виду. Если я хочу окно, я использую contentWindow. Если я хочу документ, я использую contentDocument.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...