Анализ XML с пространствами имен с использованием jQuery $ (). Find - PullRequest
21 голосов
/ 24 сентября 2008

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

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

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

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

Ответы [ 3 ]

32 голосов
/ 24 сентября 2008

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

$(this).find("geo\\:lat").text();
11 голосов
/ 24 сентября 2008

Это не просто обычное имя элемента. Это полное имя, означающее, что это имя, которое конкретно относится к типу элемента в пространстве имен. Имя типа элемента - «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();
4 голосов
/ 19 марта 2010

если у вас проблема с селектором jquery для chrome или webkit не выбрав его, попробуйте

$(this).find('[nodeName=geo:lat]').text();

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

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