2012-04-12 24 views
2

私はjQueryで自分のxmlを解析する必要のあるWebアプリケーションを開発しています。 IE7とMozillaで動作するようにWebアプリケーションを構築しています。私は自分のXMLに反復したいので、以下のコードを書きました。IE7 +とMozilla用のJqueryを使用したXML解析

<script type='text/javascript' src="jquery/jquery-1.7.1.min.js"></script> 

    <script type="text/javascript" language="javascript"> 
     var xml = '<root><cell id="1"> </cell><cell id="2"> </cell></root>';  
     //works in ie7 
     $(xml).filter("cell").each(function() { 
      alert('ie'+$(this).attr('id')); 
     }); 
     //works in mozilla 
     $(xml).find('cell').each(function() { 
      alert('mozilla'+$(this).attr('id')); 
     }); 
    </script> 

しかし、私が見つけたのは、別のブラウザ用にXMLからフェッチするために、別のループ機構を記述する必要があるということです。私はJqueryを使用しているので、ブラウザの互換性があるはずです。

xmlからすべてのブラウザで動作するので、ブラウザのチェックコードを書く必要はありません。

+0

$(XML)はHTML DOMではないので、私は実際にXML文書のIEは、このようなルートやセルなどのタグを認識し、それはないかもしれないと思う見つける()のようにIE上で失敗した理由を説明IEはそれらをタグとして見ることはできません。 – GillesC

+0

@gillescしかし、なぜ '.filter()' **がIEで動作するのか説明していません。 –

+3

IE7のように、ルートノードを取り除き、子要素( 'cell'ノード)だけを含むjQueryオブジェクトを返すようです。最初に '$ .parseXML(xml)'を呼び出し、その結果をjQueryオブジェクトに渡してみましょう: 'var xmlDoc = $ .parseXML(xml); $(xmlDoc).find( 'cell')。each(.. 。); '。 –

答えて

1

jQueryのメイン$()関数を使用してXMLを解析しないでください。 HTML要素の組み込みのinnerHTMLプロパティを使用してXMLをHTMLとして解析しようとしますが、これは正しく機能しませんが、人々を誤った安心感に陥れる程度に近くなります。代わりにparseXML()を使用してください:

var xmlDoc = $.parseXML(xml); 

$(xmlDoc).find("cell").each(function() { 
    alert($(this).attr('id')); 
});