Как я могу привязать строковое значение к -тегу в качестве скрытого параметра?

#javascript #jquery #html #html-lists #uid

#javascript #jquery #HTML #html-списки #uid

Вопрос:

Я извлекаю данные из базы данных, которую я не администрирую. Это единый список, и важными значениями являются:

  • Имя папки
  • Указатель Integer
  • UID (уникальная идентификация) String
  • Имя файла

Я успешно создал браузер с древовидной структурой, основанный на модели, использующей <ul> <li> теги and . Я также реализовал прослушиватели действий при двойном щелчке, которые находили идентификатор и действовали соответствующим образом. Идентификаторы были сохранены и найдены как value -parameter для отдельных <li> элементов, которые представляли листья или имена файлов.

Однако оказывается, что номера индексов не уникальны. Я ожидал, что они будут, хотя для UID ‘s был столбец. Я попытался установить значение value равным UID String . Это работает в моем браузере, как показывает фрагмент моего сгенерированного HTML-кода:

 <li role="treeitem" value="1581f20c-0ef9-4c21-a8ab-a407da310cf5" ... >
  

Однако, когда я извлекаю значение и сохраняю его в базе данных, оно получает только числовое значение, которое появляется перед первым нечисловым символом. В данном случае 1581. Я проверил и пришел к выводу, что параметр-значение принимает только числовые значения, что для меня действительно отстой…

Существуют ли какие-либо другие способы привязать не отображаемую строку UID к элементу HTML-списка?

РЕДАКТИРОВАТЬ 2:

Я удалил свое предыдущее редактирование из-за осознания того, в чем заключалось мое недопонимание. Для пользовательских тегов данных требуется синтаксис «data-variablename», и при его извлечении я должен опустить «data-» и просто получить variablename.

Комментарии:

1. Вы не можете создавать пользовательские data теги?

2. $(li).data("value", $value-string); ?

3. Если все ваши клиенты используют современные браузеры, вы можете попробовать атрибуты «data». Например: <li role="treeitem" data-UID="1581f20c-0ef9-4c21-a8ab-a407da310cf5" ...>

4. ВАУ, это было много ответов, и быстро! Я не знал о возможности определения пользовательских тегов данных в HTML, и я очень рад узнать о них. Мне нужно сделать его совместимым для IE8, поэтому я прочитаю о его поддержке, прежде чем приступать к решению и принимать ответ.

Ответ №1:

value Свойство <li> элементов является порядковым значением и используется исключительно в <ol> контексте (т.Е. В нумерованных списках).

Вместо этого вы можете добавить эту часть информации в качестве элемента данных:

 <li role="treeitem" data-value="abc-foo-bar" ...>
  

Затем используйте это для повторного доступа к значению:

 $(el).data('value')
  

Смотрите также: .data()

jQuery добавляет к каждому элементу специальное свойство, которое однозначно идентифицирует объект в «зарезервированной» памяти, который будет содержать ваши данные, поэтому вам не нужно беспокоиться о перезаписи чего-либо из самого элемента.

Комментарии:

1. Я остановился на этом ответе, потому что он короткий, простой, но в то же время специфичный и объясненный формат. Кроме того, он использует jQuery, который, как я подразумевал, я использовал через теги. если я прав, это означает, что он будет работать с большим количеством браузеров, а затем с некоторыми другими ответами, для которых требуется HTML-5.

2. Должен ли $(el) быть $ (li) ? Я пытался использовать это $(el).data(‘value’), также попробовал $.el.data(‘value’) , оба возвращали ошибки.

3. @mcv el в данном случае обозначает элемент, на который ссылается; это просто переменная в вашем коде.

Ответ №2:

value это уже атрибут html. Поэтому браузер пытается исправить ваше значение, когда вы его используете. Попробуйте использовать пользовательский атрибут, например data-value :

 <li role="treeitem" data-value="1581f20c-0ef9-4c21-a8ab-a407da310cf5" ... >
  

Ответ №3:

Попробуйте это:

HTML:

<li data-uid="[your-UID-here]">

jQ:

$("li").data("uid");

Ответ №4:

Вы можете использовать функцию jQuery .data() .

 $(element).data(key, value)