【问题标题】:How to store field Id in a row?如何连续存储字段ID?
【发布时间】: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 代码会有所帮助。
  • 好的,我已经添加了一些信息

标签: php jquery mysql html ajax


【解决方案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 不能到处使用? (这可能是我网站的限制吗?)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多