Question

J'essaie d'obtenir le contenu d'un élément de document XML, mais le nom de l'élément est doté de deux points.

Cette ligne fonctionne pour tous les éléments sauf ceux avec deux points dans le nom:

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

Je suppose que les deux points doivent s'échapper. Comment résoudre ce problème?

Était-ce utile?

La solution

Utilisez une barre oblique inverse, qui devrait elle-même être évitée pour que JavaScript ne la mange pas:

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

Autres conseils

Ce n'est pas simplement un nom d'élément ordinaire. C'est un nom qualifié, ce qui signifie qu'il s'agit d'un nom qui fait spécifiquement référence à un type d'élément dans un espace de noms. Le nom du type d'élément est 'lat' et le préfixe d'espace de nom est 'geo'.

Pour l'instant, jQuery ne gère pas très bien les espaces de noms. Pour plus de détails, reportez-vous au bug 155 . .

Pour le contourner, vous devriez pouvoir sélectionner ces éléments uniquement avec le nom local:

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

Si vous devez distinguer des types d'élément avec le même nom local, vous pouvez utiliser filter () :

var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("lat").filter(function() { return this.namespaceURI == NS; }).text();

Modifier: mon erreur, j'avais l'impression que le patch avait déjà atterri. Utilisez la suggestion d'Adam pour le sélecteur, et filter () si vous avez également besoin de l'espacement de nom:

var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("geo\\:lat").filter(function() { return this.namespaceURI == NS; }).text();

si vous rencontrez un problème de sélecteur JQuery avec Chrome ou Webkit si vous ne le sélectionnez pas, essayez

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

Ainsi, cela fonctionne dans tous les navigateurs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top