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