Salesforce の jQuery Mobile の例の 1 つでは、アプリのこのページで ID の FirstName、LastName、および Email が再利用されています。
<div data-role="page" data-theme="b" id="detailpage">
<div data-role="header">
<a href='#mainpage' id="back" class='ui-btn-left' data-icon='arrow-l'>Back</a>
<h1>Contact Detail</h1>
</div>
<div data-role="content">
<table>
<tr><td>First Name:</td><td id="FirstName"></td></tr>
<tr><td>Last Name:</td><td id="LastName"></td></tr>
<tr><td>Email:</td><td id="Email"></td></tr>
</table>
<form name="detail" id="detail">
<input type="hidden" name="Id" id="Id" />
<button data-role="button" id="editbtn">Edit</button>
<button data-role="button" id="deletebtn" data-icon="delete"
data-theme="e">Delete</button>
</form>
</div>
<div data-role="footer">
<h4>Force.com</h4>
</div>
</div>
<div data-role="page" data-theme="b" id="editpage">
<div data-role="header">
<a href='#mainpage' id="back" class='ui-btn-left' data-icon='arrow-l'>Back</a>
<h1 id="formheader">New Contact</h1>
</div>
<div data-role="content">
<form name="contact" id="form">
<input type="hidden" name="Id" id="Id" />
<table>
<tr><td>First Name:</td><td ><input name="FirstName" id="FirstName"
data-theme="c"/></td></tr>
<tr><td>Last Name:</td><td ><input name="LastName" id="LastName"
data-theme="c"/></td></tr>
<tr>
<td>Email:</td>
<td><input name="Email" id="Email"
data-theme="c"/></td>
</tr>
</table>
<button data-role="button" id="actionbtn">Action</button>
</form>
</div>
同じ ID を複数回使用するのは無効な HTML であることはわかっています。これは 1 つの HTML ドキュメントですが、複数ページのテンプレート内では、<div data-role="page">
技術的にはそれぞれが個別のページです。
だから私の質問は:これは適切なアプローチですか? そうでない場合、冗長なコードなしでIDの再利用を避ける最もエレガントな方法は何ですか? この場合、ページごとに個別のイベント ハンドラーを指定せずに、現在のページに応じてテーブル要素を選択できるように、同じ id を使用すると便利だと思います (ただし、単にコピー アンド ペーストのミスである可能性があります)。
編集:クラスを使用することが明確な解決策であることを認識しているので、質問の一部は次のとおりだと思います:たとえば、現在のdiv/ページでFirstnameクラスのみを選択する方法は? おそらく、「これは有効な HTML ですか?」という質問です。当たり前のように思えるかもしれませんが、私がこの質問をした理由は、それが Salesforce の例にあるとすれば、何かが欠けているのではないかと思ったからです。
EDIT 2 : このリンクhttp://forum.jquery.com/topic/using-ids-in-jquery-mobile-pagesを見つけて、この問題に関する適切な議論を行いました。