Ответ 1
Используйте обратную косую черту, которая сама должна быть экранирована, поэтому JavaScript ее не ест:
$(this).find("geo\\:lat").text();
Я пытаюсь получить содержимое элемента 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 селектором с хром или webkit, не выбрав его, попробуйте
$(this).find('[nodeName=geo:lat]').text();
таким образом он работает во всех браузерах