Анализ XML с пространствами имен с использованием jQuery $().find
-
02-07-2019 - |
Вопрос
Я пытаюсь получить содержимое элемента XML-документа, но в имени элемента стоит двоеточие.
Эта строка работает для всех элементов, кроме тех, в имени которых есть двоеточие:
$(this).find("geo:lat").text();
Я предполагаю, что двоеточие нуждается в побеге.Как это исправить?
Решение
Используйте обратную косую черту, которая сама по себе должна быть экранирована, чтобы JavaScript ее не съел:
$(this).find("geo\\:lat").text();
Другие советы
Это не просто обычное имя элемента.Это уточненное имя, означающее, что это имя конкретно относится к типу элемента в пространстве имен.Имя типа элемента — «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();
таким образом это работает во всех браузерах