如何连续存储字段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.Id
和row.Name
【讨论】:
看起来很棒!它与 IE 兼容吗? (IE6?)。不喜欢IE,但是要求... 是的,它只是 jQuery 的一部分,我在项目中经常使用它,并且在 IE6 和所有其他主流浏览器中运行良好。 +1 很好的答案,但我认为重要的是要注意这是 html5 而不是 xhtml 兼容。 好的,我将使用此解决方案...我还将存储有时存储在隐藏跨度元素中的其他数据!非常感谢。【参考方案3】:你也可以使用jQuery metadata .....
用 html 存储数据真是太棒了
【讨论】:
似乎标准的 jQuery 函数可以解决我的问题,我不喜欢使用外部插件。 个人选择.. 我也喜欢这种在 HTML 中存储数据的方式我想...我理解你的问题 - 多个数据表,都带有自动增量 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中如果主键字段是不连续的 如何查出表中的第三四条数据