Analisando XML com espaços para nome usando jQuery $ (). Localizar
-
02-07-2019 - |
Pergunta
Estou tentando obter o conteúdo de um elemento de documento XML, mas o elemento tem um cólon em seu nome.
Esta linha funciona para todos os elementos, mas aqueles com um cólon no nome:
$(this).find("geo:lat").text();
Suponho que o cólon precisa escapar. Como faço para corrigir isso?
Solução
Use uma barra de barriga, que por si só deve ser escapada para que o JavaScript não o coma:
$(this).find("geo\\:lat").text();
Outras dicas
Isso não é apenas um nome de elemento comum. Esse é um nome qualificado, o que significa que é um nome que se refere especificamente a um tipo de elemento dentro de um espaço para nome. O nome do tipo de elemento é 'lat' e o prefixo do espaço para nome é 'geo'.
No momento, o jQuery não pode lidar com os nomes muito bem, veja Bug 155 para detalhes.
No momento, como uma solução alternativa, você poderá selecionar estes elementos apenas com o nome local:
$(this).find("lat").text();
Se você precisar distinguir entre tipos de elementos com o mesmo nome local, pode usar filter()
:
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("lat").filter(function() { return this.namespaceURI == NS; }).text();
Editar: Meu erro, tive a impressão de que o patch já havia pousado. Use a sugestão de Adam para o seletor e filter()
Se você precisar do nome de nome também:
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("geo\\:lat").filter(function() { return this.namespaceURI == NS; }).text();
se você tem um Problema de seletor de jQuery com Chrome ou Webkit não selecionando, tente
$(this).find('[nodeName=geo:lat]').text();
Dessa forma, funciona em todos os navegadores