Анализ XML с пространствами имен с использованием jQuery $().find

StackOverflow https://stackoverflow.com/questions/128580

Вопрос

Я пытаюсь получить содержимое элемента 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();

таким образом это работает во всех браузерах

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top