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 みたいなのが検索しても出てこなかったわけですけど、皆さん普段どうされてるんでしょうね…

心身が疲れました。