Я пытаюсь получить содержимое элемента XML-документа, но в имени элемента есть двоеточие.
Эта строка работает для всех элементов, кроме тех, в имени которых есть двоеточие:
$(this).find("geo:lat").text();
Я предполагаю, что толстая кишка нуждается в побеге. Как я могу это исправить?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте обратную косую черту, которая сама по себе должна быть экранирована, чтобы JavaScript ее не съел:
$(this).find("geo\:lat").text();
@Mike, да, это помогает, но у меня была проблема с пространством имен, общая проблема с моим возвращаемым XML, который содержит <title> и <mine: title> и хром, в этом случае объедините их :(
У меня это не работает в FF, но я нашел такой ответ: stackoverflow.com/questions/853740/…
.find, как и getElementsByTagName, не ведет себя одинаково в разных браузерах (в частности, в Chrome и Firefox). Если вам интересны прямые дети, используйте .children, который работает во всех браузерах. Подробнее на: wiki.orbeon.com/forms/doc/contributor-guide/…
Я сослался на комментарий @ MikeGrace в ответе на связанный вопрос: stackoverflow.com/a/30040350/775359
Это не просто обычное имя элемента. Это полное имя, означающее, что это имя, которое конкретно относится к типу элемента в пространстве имен. Имя типа элемента - lat, а префикс пространства имен - geo.
Прямо сейчас jQuery не может хорошо работать с пространствами имен, подробности см. В ошибка 155.
Прямо сейчас, как обходной путь, вы должны иметь возможность выбирать эти элементы только с локальным именем:
$(this).find("lat").text();
Если вам нужно различать типы элементов с одинаковым локальным именем, вы можете использовать filter():
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("lat").filter(function() { return this.namespaceURI == NS; }).text();
Редактировать: моя ошибка, у меня создалось впечатление, что патч уже приземлился. Используйте предложение Адама для селектора и filter(), если вам тоже нужно пространство имен:
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("geo\:lat").filter(function() { return this.namespaceURI == NS; }).text();
если у вас есть Проблема с селектором jquery с Chrome или webkit, который не выбирает, попробуйте
$(this).find('[nodeName=geo:lat]').text();
так работает во всех браузерах
Стоит отметить, что начиная с jQuery 1.7 были проблемы с некоторыми обходными путями для поиска элементов пространства имен. Смотрите эти ссылки для получения дополнительной информации: bugs.jquery.com/ticket/10377steveworkman.com/html5-2/javascript/2011/…
Определенно рекомендую проверить вторую ссылку, которую ArnisAndy предоставил в своем комментарии выше. Это превосходит все другие решения.
Ссылка на steveworkman действительно помогла. Для меня это работает в Chrome и FF: $(xData.responseXML).find("z\:row, row").each(function() { // Do stuff });
@Vaske, я видел то же самое в Chrome, используя одну из последних версий jQuery. У меня сработало использование второй половины имени узла после двоеточия. Я использовал
.find("lat")вместо.find("geo\:lat"), и у меня это сработало.