jQuery Mobileを使う場合、HTML内のidに対してセレクタが期待の動作をしない。

jQuery Mobileでは、ハイパーリンククリック時などのページの遷移時、HTMLを読み込み直すわけではなく、

AJAXでリンク先のデータを取得し、data-role=“page"部分を現在のDOMの一部に挿入し、

その部分を表示する手法をとっている。

Anatomy of a Page

そのため、違うページ中に同じidを持つ要素があると、1つのDOM中に2つ以上の同じidが含まれてしまう。

idが重複するために、jQueryなどでセレクタで要素を取得すると、期待外の要素が取れ、期待外動作になるケースがある。

$("#hogehoge").after('

<li>
  newline
</li>');

この動作に気が付かず、おかしな現象に悩まされていた。。

とりあえず、id指定をclass指定にして、

$.mobile.activePage.find(".hogehoge").after('

<li>
  newline
</li>');

と変更。

うまくいったように見える。