LINUX.ORG.RU

Ответ на: комментарий от Deleted

jQuery же. Она их и использует.

Если #bd - это база данных, то ты мудак, осваивай Local Storage и indexedDB (оно в зачаточном состоянии правда). Если какие-то небольшие данные, которые нужно проассоциировать именно с этим элементом и в рантайме хранить не хочется/не получается, то наверно нормально, хотя наверняка можно обойтись и без этого.

Kalashnikov ★★★
()
Ответ на: комментарий от Deleted

data-* атрибуты, не?

А подробнее?

Типа так можно?

$('#bd')[0].addAttribute('data-hello', 'World')
alert($('#bd')[0].getAttribute('data-hello'))
Понятно, что на практике в таких случаях get/setAttribute использоваться не будет. Или будет?

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от Kalashnikov

Если #bd - это база данных

Нет, это случайно взятый для пример идентификатор из исходного кода ЛОРа.

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Ну, HTML5 отводит атрибуты data-тут-чего-хочешь под пользовательские данные. Так то, конечно, можно любые использовать, но в этом случае не наткнёшь на инновационный атрибут в каком-нибудь HTML10.

Есть даже API отдельный, но он, естественно, работает только в новых браузерах. А так можно читать и обычными set/getAttribute или чем ещё там сможешь. Это обычные атрибуты.

Deleted
()
Ответ на: комментарий от Kalashnikov

Kalashnikov

jQuery же. Она их и использует.

А, я не совсем прав, .data() их только читает если их кто-то поставил.

sphericalhorse

Типа так можно?

Да, потом ещё можно будет эти же данные получить с $('#bd').data('hrllo')

Kalashnikov ★★★
()
Ответ на: комментарий от Deleted

Именно data-тут-чего-хочешь, как атрибут, или можно dataТутЧегоХочешь, как свойство? Или опять же без разницы?

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от Deleted

То есть data-тут-чего-хочешь — это специально отведенный аттрибут тега, который просто хранит строковую информацию? Но если мне нужно, я могу всё-же делать, например document.getElementById('bd').dataHello = ['w', 'o', 'r', 'l', 'd']?

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Свойства вроде нет, но можно

var element = document.getElementById('bd');
element.dataset['hello'] = 'что-то-там';     // тут к элементу дописывается аттрибут data-hello
console.log(element.dataset.hello);

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

Да, потом ещё можно будет эти же данные получить с $('#bd').data('hrllo')

Видно тут нужно либо использовать jQuery, либо нет, но не мешать:

$('#bd')[0].setAttribute('data-username', 'ivan')
$('#bd').data('username') //"ivan"
$('#bd')[0].setAttribute('data-username', 'ivaaaaaan')
$('#bd').data('username') //"ivan"

Причем $('#bd').data('username', 'ivan') не создает никаких новых атрибутов тега.

Я совершенно не могу понять, где jQuery хранит данные установленные через .data(), судя по всему где-то у себя, но не в элементе.

sphericalhorse ★★★★★
() автор топика

Иногда от этого никуда не деться.

Некоторые фреймворки вообще заточены на декларативную разметку с хранением данных в атрибутах, например dijit

anthill
()
Ответ на: комментарий от sphericalhorse

.data() сохраняет в каком-то внутреннем хранилище, точно не знаю как оно работает, но в аттрибуты оно точно не пишет. А когда ты обращаешься к нему и пытаешься взять значение по какому-то ключу оно может подхватить значение из соответствующего аттрибута.

И похоже и правда лучше не мешать.

Kalashnikov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.