Jquery -访问特定于每行的变量


Jquery - Access variables specific to each row?

我有一个网页,使用php查询数据库,并在表中显示结果,如:

<table id="tablelist">
<thead>
<tr>
<th>Header1</th>
<th>Header2</th>
<th>Header3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Info here1</td>
<td>Info here1</td>
<td class="actions">Action1 - Action2 - Action3</td>
</tr>
<tr>
<td>Info here2</td>
<td>Info here2</td>
<td class="actions">Action1 - Action2 - Action3</td>
</tr>
</tbody>
</table>

现在,每一行都有来自数据库的特定于该行的唯一信息。例如主id、日期和类别。当有人单击任何行的操作时,我需要获得特定于他们单击的行的这2条信息。目前我试着这样做:

<div class="row_data">{info2 in json format}</div>    
<tr>
    <td>Info here1</td>
    <td>Info here1</td>
    <td class="actions">Action1 - Action2 - Action3</td>
    </tr>
<div class="row_data">{info2 in json format}</div>    
<tr>
    <td>Info here2</td>
    <td>Info here2</td>
    <td class="actions">Action1 - Action2 - Action3</td>
    </tr>

因此,当有人点击一个操作链接时,它将获得row_data的前一个值,这是json格式。我将使用jquery解析json值,并使用在jquery代码的其余部分中找到的信息。但我被告知这是无效的html,不推荐。什么是推荐的/最佳的方式来记录每一行动态数据,当一个动作被点击时,我可以在我的jquery代码中引用它?

方法是使用HTML 5的数据属性:

<tr id="foo" data-something="put whatever you want in here">
    <!-- content -->
</tr>

然后可以使用

访问存储在那里的信息
$("#foo").data("something")

data-something的值可以是您喜欢的任何值(只要它通过htmlspecialchars过滤,如果您直接从PHP回显它),如果更方便的话,您可以使用多个数据属性(通常是这样)。

John Resig也有一篇关于这个主题的文章

Jon的建议有效,但我讨厌在HTML中嵌入数据,所以我将创建一个从id到数据的JSON映射,并将这些id添加到tr中。从单击处理程序中,获取TR的id并从映射中查找数据。

我想我累了,可能误解了这一点,所以如果我建议的是完全错误的,请原谅我…

假设有人在任意一行点击动作1。也许你会在每个链接上设置一个点击监听器,假设你给你的链接一个名为"action"的类…

<tr>
    <td class="json_info" style="display:none">{your json string}</td>
    <td>Info 1</td>
    <td>Info 2</td>
    <td><a class="action">action link</a></td>
</tr>
$('.action').click(function(){
    var json = $(this).parent().find('.json_info').html();
});

如果json_info的html是一个正确格式化的json字符串,那么它应该能够从这个jquery选择调用中读取json。