jQueryでXMLを読むときhtml()を使うとsafariでエラー

■ 環境
jquery-1.10.1
Safari-5.1.7

初めはiPhoneでエラーになるのかと思ったが,調べていくとOSは関係なくsafariのみで起きる事象みたい。chromeではエラーは起きないでsafariだけエラーが起きるなんて珍しいなーと思ったのでメモ。

例えば以下のようなXMLが用意してあって,/getxml.phpにアクセスするとXMLが取得できるとする。


	
		ABC0001
	
	
		ABC0002
	
	
		ABC0003
	

次にJSで以下の様にしてproductCodeを順番にコンソールに出力する。

$.ajax({
	url: '/getxml.php',
	dataType: 'xml',
	success: function(xml_data){
		$(xml_data).find('productDetail').each(function(i){
			console.log($('productCode', this).html());
		});
	}
});

以上の書き方だとsafariだけエラーが出る。エラーメッセージはこんな感じ。

TypeError: 'undefined' is not an object (evaluating 'n.innerHTML.replace')

どうも$(‘productCode’, this).html()が良くないみたい。
いつもあまり気にせずhtml()を使っていたがtext()に変えてみたらsafariでもうまく動いた。

$.ajax({
	url: '/getxml.php',
	dataType: 'xml',
	success: function(xml_data){
		$(xml_data).find('productDetail').each(function(i){
			console.log($('productCode', this).text());
		});
	}
});

今後はtext()も頭に入れておこう。。。