getElementsByTagNameNS в (X) HTML-документах - PullRequest
1 голос
/ 25 сентября 2010

У меня есть вопрос по Javascript и DOM;не должен ли следующий код получить три элемента foo: bar в теле?В окне предупреждения отображается ноль.Он не работает ни в одном из моих браузеров (даже в Chrome Canary).Спасибо за помощь, хороших выходных.

</p> <pre><code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.com"> <head> <title>Hello!</title> <script type="text/javascript"> function bodyLoad() { var extElements = document.getElementsByTagNameNS('http://foo.com', 'bar'); alert(extElements.length); } </script> </head> <body onload="bodyLoad();"> <foo:bar>First Foo-Bar</foo:bar> <foo:bar>Second Foo-Bar</foo:bar> <foo:bar>Third Foo-Bar</foo:bar> </body> </html>

1 Ответ

3 голосов
/ 25 сентября 2010

Вероятно, вы используете документ с неправильным типом содержимого.Браузер должен обрабатывать его как XML для распознавания пространств имен, поэтому вам нужно использовать application/xhtml+xml или другой тип содержимого XML, а не text/html.

В качестве отступления ваш Doctype неверен.Если вы хотите использовать DTD, вам понадобится тот, который включает в себя элементы, которые вы используете из пространства имен foo.Если нет, просто избавьтесь от Doctype - он не имеет отношения к режиму рендеринга в XML-документах (опять же, text/html документы обрабатываются как суп тегов, а не XML).

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