您真正想要的不仅是在表中存储可视数据,而且还存储某种元数据。有几种方法可以实现这一点。
方法#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", ...
}
这也会生成完全有效的 HTML(5) 代码,并允许您存储无限量的信息,因为您可以指定任意数量的data-*
属性。
方法#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", ...
}
这也产生了有效的 HTML,但在我看来在语义上并不正确,因为<input>
字段内的数据是某种松散的并且没有直接连接到行。另外,您可以创建多个<input>
具有相同名称的字段。
- 我会建议方法 #2 (
data-*
),因为这是最灵活的解决方案,并且使用了旨在存储元数据的属性。
- 方法 #1 在所有(较旧的)浏览器中最可靠,因为它们都支持通过 JS 访问
id
orclass
属性,只要您保持id
标签唯一。
- 方法#3 对于旧版浏览器也非常可靠。