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()も頭に入れておこう。。。

