如何连续存储字段ID?

Posted

技术标签:

【中文标题】如何连续存储字段ID?【英文标题】:How to store field Id in a row? 【发布时间】:2011-07-16 14:36:38 【问题描述】:

我用 jquery 和大量 ajax 请求编写了一个网站来获取表格数据并在服务器端使用 php/mysql 请求数据修改。

目前,我使用 id 属性来存储表的字段的 id(这是一个自增的 int 值)。它工作正常。

但我最近了解到 id 应该是唯一的(并且以字母开头......)。 而且我有不同的表可能具有相同的 id 值(对于不同的 sql 表) 那么我不兼容 html(也不是 xhtml)...

如何更正我的代码?

使用jQuery的.data()函数? 以 id 为值的隐藏 html 元素 (<span class="id">3</span>) ? 其他解决方案?

附加信息: 我写了一个小部件来管理我的表格。 要添加新行,我会这样做:

    row = $('<div class="row" id="'+item.id+'"/>');
    [...] // I add fields to my row
    row.appendTo(tableData);// tableData is the html element where rows are

当一个字段元素发生变化时,我会触发一个事件到表中,该事件将要求对具有正确 id 的服务器进行修改:

$(e.target).closest(".row").attr("id")

【问题讨论】:

我认为提供一些“错误”的 html 代码会有所帮助。 好的,我已经添加了一些信息 【参考方案1】:

不要使用id,而是使用data-id 并使用.data('id')在该元素上)通过 jQuery 检索它。

【讨论】:

【参考方案2】:

如果您能够使用 jQuery 1.4.3 或更高版本,请查看使用 html 5 data-* 属性。 jQuery 1.4.3 将自动使用这些 data- 属性并将它们放在元素的.data() 集合中。

例子:

<table>
  <tr data-rowId="1">

  </tr>
</table>

$("tr:first").data("rowId") 将打印 1

此方法还允许您存储 json 对象。

<table>
  <tr data-row='"Id" : 1, "Name": "Smith"'>

  </tr>
</table>

比你的data() var row = $("tr:first").data("row") 可以参考row.Idrow.Name

【讨论】:

看起来很棒!它与 IE 兼容吗? (IE6?)。不喜欢IE,但是要求... 是的,它只是 jQuery 的一部分,我在项目中经常使用它,并且在 IE6 和所有其他主流浏览器中运行良好。 +1 很好的答案,但我认为重要的是要注意这是 html5 而不是 xhtml 兼容。 好的,我将使用此解决方案...我还将存储有时存储在隐藏跨度元素中的其他数据!非常感谢。【参考方案3】:

你也可以使用jQuery metadata .....

用 html 存储数据真是太棒了

【讨论】:

似乎标准的 jQuery 函数可以解决我的问题,我不喜欢使用外部插件。 个人选择.. 我也喜欢这种在 HTML 中存储数据的方式
【参考方案4】:

我想...我理解你的问题 - 多个数据表,都带有自动增量 ID?

我的解决方案是在 ID 前附加一个字母(如您所说)以区分它。

示例是我要做的“汽车”数据集:

<table>
<tr id="cars_1">
...
</tr>
<tr id="cars_2">
...
</tr>
<tr id="cars_3">
...
</tr>
</table>

以后如果你有另一张桌子,自行车,你会这样做:

<table>
<tr id="bike_1">
...
</tr>
<tr id="bike_2">
...
</tr>
<tr id="bike_3">
...
</tr>
</table>

您的最终结果将是唯一 ID,同时牢记 ID db 值,因此您将进行简单检查(如果是汽车,则执行此操作等),然后分隔前缀(ID 为 1 的汽车,您会使用 PHP expolode() fn) 之类的东西。

希望澄清一下,并且我理解你的问题。

【讨论】:

【参考方案5】:

你可以在你的 id 前面加上表名:

<div id="mytable_1234"></div>

从字段中提取表名和 id 很容易,这符合 HTML。

var values = $(element).attr('id').split('_');
// values[0] is the table name and values[1] is the id.

如果您已在表名中使用下划线,则可以使用任何其他分隔符。

【讨论】:

我认为他的意思可能是记录(行)ID,仅供参考 @Jakub 我把我的例子放在 div 元素中,但我认为 OP 会理解他可以在 tr 或其他任何东西中使用它;)问题中的粘贴代码使用也是一个 div,所以我没有错…… 感谢您的回答,但我会使用 .data()。在我看来,它似乎更干净。 @Benoît data() 答案是一个很好的解决方案,但由于我不能使用 HTML5,我必须坚持我的解决方案......但我也认为使用 HTML5 数据更强大字段.. 为什么 HTML5 不能到处使用? (这可能是我网站的限制吗?)

以上是关于如何连续存储字段ID?的主要内容,如果未能解决你的问题,请参考以下文章

使用指定的顺序按字段选择连续组

在SQL中如果主键字段是不连续的 如何查出表中的第三四条数据

Hive - 选择另一个字段的值在连续时间戳中递增的 id

mysql中如何设置一个字段,表中每增加一个值,这个字段自动产生一个连续的序号?

如何为多个模型提供连续的 ID?

“连续字段的容器格式”对文件格式意味着啥?