jQuery versus invalid html
なんの変哲もない以下のコード。
var a = $('html').find('some selector'); $.get(document.URL, function(html) { var b = $(html).find('some selector'); });
a の結果と b の結果が異なる、といったら驚きますよね。
ところが現実は非情です。ページによっては a と b が異なることがあります。jQuery.get により取ってきた生の html が invalid な場合に、jQuery が invalid な html をうまく扱えずに妙な結果になってしまうことがあります。
a はブラウザが一度食べて生成した document から生成されてると思うのですが、ブラウザが invalid な部分を上手に扱ってくれていたわけですね。
ブラウザって、ほんとえらい…
仕方がないので、ブラウザに一度食わせて document を作ってから jQuery オブジェクトを作る、というようなことをする必要が出てくるわけです。残念ですね。document の作り方に関して、ボクは javascript や HTML や DOM に関しては全くの素人なので何もいえないわけですが、とりあえずこれが参考になりました。
ところで invalid な html を jQuery で扱うための workaround みたいなのが検索しても出てこなかったわけですけど、皆さん普段どうされてるんでしょうね…
心身が疲れました。