Как хранить Id поля подряд? - PullRequest
4 голосов
/ 16 марта 2011

Я пишу веб-сайт с jquery и большим количеством запросов ajax, чтобы получить данные для таблицы, и запрашиваю изменения данных с помощью PHP / MySql на стороне сервера.

В настоящее время я использую атрибут id для хранения идентификатора поля таблицы (который является значением int автоинкремента).
И работает нормально.

НО я недавно узнал, что id должен быть уникальным (и начинаться с буквы ...).
И у меня есть разные таблицы, которые могут иметь одно и то же значение идентификатора (для разных таблиц SQL) Тогда Я не поддерживаю html (и не xhtml) ...

Как я могу исправить свой код?

  • Используя .data() функцию jQuery?
  • Скрытый html-элемент со значением id (<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

Когда элемент поля изменяется, я запускаю событие в таблице, которое будет запрашивать изменение на сервере с правильным идентификатором:

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

Ответы [ 5 ]

7 голосов
/ 16 марта 2011

Если вы можете использовать jQuery 1.4.3 или выше, используйте атрибуты html 5 data-*. jQuery 1.4.3 автоматически использует эти атрибуты данных и помещает их в коллекцию .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

4 голосов
/ 16 марта 2011

Вы можете добавить префикс ID к имени таблицы:

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

Из таблицы легко извлечь имя таблицы и идентификатор, и это соответствует HTML.

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

Вы можете использовать любой другой разделитель, если вы уже используете подчеркивания в именах таблиц.

1 голос
/ 16 марта 2011

Вместо использования id используйте data-id и используйте .data('id') ( для этого элемента ), чтобы получить его с помощью jQuery.

1 голос
/ 16 марта 2011

Вы также можете использовать метаданные jQuery .....

Это прекрасно для хранения данных в html

0 голосов
/ 16 марта 2011

Я думаю ... Я понимаю ваш вопрос - несколько таблиц данных, все с идентификаторами автоинкремента?

Мое решение было бы предварительно добавить идентификатор с буквой (как вы сказали), чтобы дифференцировать его.

Примером может служить набор данных для «автомобилей», который я бы сделал:

<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>

Ваш конечный результат будет уникальным идентификатором, при этом следует помнить значение db идентификатора, поэтому вам нужно будет выполнить простую проверку (если автомобили, затем сделать это и т. Д.), А затем отделить префикс (автомобили с идентификатором 1, будет использовать что-то вроде PHP expolode() fn).

Надеюсь, что это прояснит, и что я понял ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...