为jQuery交互识别元素的最佳方法

为jQuery交互识别元素的最佳方法,jquery,html,Jquery,Html,假设我有一个项目表,我想在每一行添加一个按钮来删除该项目。项目来自数据库,因此它们具有唯一的ID。在jQuery函数中,我必须检索所述项目的ID,以便打开确认框并最终将浏览器重定向到删除页面,而无需进行安全检查,这是供内部使用的 在标记中的何处放置ID更好?我认为最好将ID作为行ID的一部分: .... <tr id="item_3">...<td>delete tag</td></tr> <tr id="item_4">...<

假设我有一个项目表,我想在每一行添加一个按钮来删除该项目。项目来自数据库,因此它们具有唯一的ID。在jQuery函数中,我必须检索所述项目的ID,以便打开确认框并最终将浏览器重定向到删除页面,而无需进行安全检查,这是供内部使用的


在标记中的何处放置ID更好?

我认为最好将ID作为行ID的一部分:

....
<tr id="item_3">...<td>delete tag</td></tr>
<tr id="item_4">...<td>delete tag</td></tr>
<tr id="item_5">...<td>delete tag</td></tr>
....
然后在jQuery中使用简单的正则表达式获取id

更新: 或者,只需将其放入删除按钮/锚点的rel属性中

更新2:
在这种情况下,由于正则表达式可能会降低jQuery的性能,请尝试将id作为每行的rel属性。

为每个项指定一个唯一的id。选择器工作得最快,因为它映射到一个本地javascript方法。

将其放入元素是有意义的,因为该项包含与该项相关的所有数据/标记。
如果您事先知道“删除”按钮是唯一与唯一ID交互的元素,则只需将其添加到按钮本身就会更快、更容易一些。

我宁愿使用div布局而不是表格

您应该将其放在“删除”按钮周围的表单上:

<tr>...<td><form action="delete.htm?id=001"><input type="submit">Delete</input></form></td></tr>

我意识到这似乎有点重,但这在没有javascript的情况下是可行的,javascript始终是最佳实践。

有几种方法可以实现这一点

首先,试试这个。这允许您将JSON数据嵌入元素的class属性中。它验证并不会影响应用于元素的类。您的tr可能如下所示:

<tr class="some-class {uid:'12345', asMuchDataAsYouLike}">

未测试,但假设您使用的是jQuery 1.3+

$(this).closest('tr').attr('id');

应该为您单击的行提供id,注意在构建表时必须首先为该行提供id。

是因为我,还是因为这么简单

<tr id="cell-8958"><td>..<td><td class="delete">Delete me</td></tr>
编辑:或者,如果要以数字开头:

.id { display: none; }

注:CSS可能不同,还没有在浏览器中测试过


A.

-1感谢你没有把问题弄大。这显然是表的一个语义上有效的用例。为什么?我们不能再对来自数据库表的数据使用表了吗?问题是如何找到最合适的位置进行项目标识,而不是在这种情况下应该使用什么样的标记标记。只是一个补充:ID必须以字母开头。更多信息我可以给他们一个唯一的ID,但我不能使用选择器,除非我想为每一项编写一个函数。我必须作为它们的包含表的后代来访问它们。是这样吗?您不需要使用ID选择器,可以使用$'button'。最近的'tr'来选择父行。在这种情况下,我将使用哪个选择器来仅标识删除单元格?给他们一个类,然后从他们的父对象获取ID?@kemp是的,但你应该从父对象的父对象获取ID:rel是一个有趣的解决方案,其中的任何值都是有效的?@kemp,不确定rel的有效值,你应该用验证器检查它,对于这种特定情况,检查得有点过火,但是非常有趣的替代解决方案,thanksGood point具有非js支持,可以通过确认模式和Ajax进行增强。无需进行安全检查,它是供内部使用的-请仔细阅读;]:D
$(this).closest('tr').attr('id');
<tr id="cell-8958"><td>..<td><td class="delete">Delete me</td></tr>
$('.delete').click(function(){
  thisid = $(this).parent().attr('id');
  dostuff();
});
.id { display: none; }
<tr><td class="id">cell-8958</td><td>..<td><td class="delete">Delete me</td></tr>
$('.delete').click(function(){
  thisid = $(this).parent().find('td.id').text();
  dostuff();
});