本当に必要なのは、ビジュアル データをテーブルに格納するだけでなく、ある種のメタ データも格納することです。これを実現するにはいくつかの方法があります。
方法 #1: (ab) id
orclass
属性を使用する:
結果の HTML は次のようになります。
<!-- example with the id-attribute: -->
<tr id="mysql_row_1"> ... </tr>
<tr id="mysql_row_2"> ... </tr>
<!-- example with the class-attribute: -->
<tr class="mysql_row_1"> ... </tr>
<tr class="mysql_row_2"> ... </tr>
これは両方とも有効な HTML を生成しますが、実装されていない目的のために属性タグを悪用することになります。これは一般的に悪いと見なされます。複数の値を保存する必要がある場合を想像してください。複数のクラスを割り当てることもできますが、その場合は id-tag で行き詰まります。したがって:これをしないでください!
この解決策を実現するには、次のようにコードを変更する必要があります: (行番号$x
としての値が必要だと思います。)
while ($row=mysqli_fetch_assoc($search) and $row1=mysqli_fetch_assoc($search1)) {
echo '<tr class="mysql_row_'.$x.'" onclick="getRowNumber()">';
echo "<td>".$x."</td>";
echo "<td>".$row['location']."</td>";
echo "<td>".$row1['fare']."</td>";
echo "</tr>";
$x++;
}
JavaScript の部分:
function getRowNumber() {
var rowNumber = this.className.replace("mysql_row_",""); // fetches the classname and removes the extra-strings
alert(rowNumber); // alerts "1", "2", ...
}
方法 #2:data-*
属性を使用します。
このソリューションは HTML5 に有効です。互換性に関する追加情報がある場合は、追加してください。
HTML コードは次のようになります。
<tr data-mysql_row_number="1" onclick="getRowNumber()"> .... </tr>
<tr data-mysql_row_number="2" onclick="getRowNumber()"> .... </tr>
そして変更されたJavaScript:
function getRowNumber() {
alert(this.getAttribute("data-mysql_row_number")); // alerts "1", "2", ...
}
data-*
これにより、完全に有効な HTML(5) コードも生成され、必要な数の属性を指定できるため、無限に無限の量の情報を保存できます。
方法 #3: 非表示<input>
フィールドを使用する:
結果の HTML コード:
<tr onclick="getRowNumber()">
<td>
Normal content of this field
<input type="hidden" name="mysql_row_number" value="1"/>
</td>
</tr>
そして、値を取得するための JS コード:
function getRowNumber() {
var rowNumber = this.getElementsByName('mysql_row_number')[0].value;
alert(rowNumber); // alerts "1", "2", ...
}
<input>
これも有効な HTML を生成しますが、フィールド内のデータはある種の緩いものであり、行に直接接続されていないため、私の意見では意味的に正しくありません。<input>
さらに、同じ名前で複数のフィールドを作成できます。
- 方法 2 ( ) をお勧めします
data-*
。これは最も柔軟なソリューションであり、メタデータを格納するように設計された属性を使用するためです。
- 方法 #1 は、すべての (古い) ブラウザーで最も信頼性が高く機能します。タグを一意に保つ限り、すべてのブラウザーが JS を介して
id
or属性へのアクセスをサポートしているためです。class
id
- 方法 #3 は、古いブラウザーでも非常に信頼性があります。