Разбор XML с пространствами имен с помощью jQuery $ (). Find

Я пытаюсь получить содержимое элемента XML-документа, но в имени элемента есть двоеточие.

Эта строка работает для всех элементов, кроме тех, в имени которых есть двоеточие:

$(this).find("geo:lat").text();

Я предполагаю, что толстая кишка нуждается в побеге. Как я могу это исправить?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
21
0
29 897
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте обратную косую черту, которая сама по себе должна быть экранирована, чтобы JavaScript ее не съел:

$(this).find("geo\:lat").text();

@Vaske, я видел то же самое в Chrome, используя одну из последних версий jQuery. У меня сработало использование второй половины имени узла после двоеточия. Я использовал .find("lat") вместо .find("geo\:lat"), и у меня это сработало.

Mike Grace 20.01.2012 02:50

@Mike, да, это помогает, но у меня была проблема с пространством имен, общая проблема с моим возвращаемым XML, который содержит <title> и <mine: title> и хром, в этом случае объедините их :(

vaske 20.01.2012 03:21

У меня это не работает в FF, но я нашел такой ответ: stackoverflow.com/questions/853740/…

Macario 22.03.2012 12:46

.find, как и getElementsByTagName, не ведет себя одинаково в разных браузерах (в частности, в Chrome и Firefox). Если вам интересны прямые дети, используйте .children, который работает во всех браузерах. Подробнее на: wiki.orbeon.com/forms/doc/contributor-guide/…

avernet 03.12.2013 06:18

Я сослался на комментарий @ MikeGrace в ответе на связанный вопрос: stackoverflow.com/a/30040350/775359

Mars Robertson 05.05.2015 00:32

Это не просто обычное имя элемента. Это полное имя, означающее, что это имя, которое конкретно относится к типу элемента в пространстве имен. Имя типа элемента - 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 27.03.2012 01:24

Определенно рекомендую проверить вторую ссылку, которую ArnisAndy предоставил в своем комментарии выше. Это превосходит все другие решения.

Valjas 09.04.2013 01:07

Ссылка на steveworkman действительно помогла. Для меня это работает в Chrome и FF: $(xData.responseXML).find("z\:row, row").each(function() { // Do stuff });

kosemuckel 10.12.2015 10:23

Другие вопросы по теме