web-dev-qa-db-ja.com

jQuery $()。findを使用して名前空間でXMLを解析する

XMLドキュメント要素のコンテンツを取得しようとしていますが、要素の名前にコロンが含まれています。

この行は、名前にコロンが含まれている要素を除くすべての要素で機能します。

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

結腸は逃げる必要があると思います。これを修正するにはどうすればよいですか?

21
titanous

バックスラッシュを使用します。バックスラッシュ自体はエスケープして、JavaScriptがそれを食べないようにする必要があります。

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

それは単なる通常の要素名ではありません。これは修飾名です。つまり、名前空間内の要素タイプを具体的に参照する名前です。要素タイプ名は「lat」で、名前空間プレフィックスは「geo」です。

現在、jQueryは名前空間をうまく処理できません。詳細については、 bug 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();
_

編集:私の間違い、私はパッチがすでに着陸したという印象を受けました。セレクターにはAdamの提案を使用し、名前空間も必要な場合はfilter()を使用します。

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

jqueryセレクターの問題がchromeまたはwebkit選択されていない場合は試してください

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

このようにして、すべてのブラウザで機能します

4
simon