#javascript #jquery #html #jquery-data
#javascript #jquery #HTML #jquery-данные
Вопрос:
Я использую атрибут html5 «data» для элемента, и я хочу присвоить значение атрибута переменной, только если она существует и если она не пуста:
var xxx = $(this).data('what') ? $(this).data('what') : 'default_value';
но это не работает. Я всегда получаю значение по умолчанию…
Комментарии:
1. вы уверены, что data-что существует в любой точке?
2. Вывели ли вы условную часть инструкции, чтобы посмотреть, действительно ли она может быть преобразована в true и false? Если нет, измените свое условие, чтобы оно работало.
3. хорошо, проблема была в том, что
$(this)
было что-то другое, чем я ожидал 🙂 извините за тупость : x
Ответ №1:
Использование короткого замыкания проще и эффективнее:
var xxx = $(this).data('what') || 'default_value';
Но ваш код должен был работать в любом случае, предполагая, что данные существовали (как отметил комментатор).
Комментарии:
1. перестаньте это делать. Опереди меня в ответе: p
2. jQuery обрабатывает
data-*
атрибуты как.data()
. Смотрите демонстрацию @amit_g.3. @Rocket, я этого не знал. Я убрал свое предостережение. Действительно ли он теперь хранит данные как атрибут? Если нет, то что произойдет, если вы обновите данные, но не атрибут?
4. Таким образом, в основном он копирует
data-*
значения при первом доступе, но они не синхронизированы после внесения изменений через$.data
.5. ребята, вы знаете, какое значение будет иметь
$(this).data('what');
какой атрибут, если данных нет?
Ответ №2:
Похоже, что $ (this) — это не то, что вы ожидаете. В остальном оператор выглядит нормально. ДЕМОНСТРАЦИЯ
Ответ №3:
Согласно документации:
.data()
Метод .data() позволяет нам присоединять данные любого типа к элементам DOM способом, который безопасен от циклических ссылок и, следовательно, от утечек памяти.
.attr()
Метод .attr() получает значение атрибута только для первого элемента в сопоставленном наборе.
Итак, что вы хотите, так это использовать метод .attr(), подобный этому:
var xxx = $(this).attr('data-what') || 'default_value';
Комментарии:
1. jQuery обрабатывает
data-*
атрибуты как.data()
. Смотрите демонстрацию @amit_g.2. @Rocket: Использовать
.attr()
для этого быстрее. Проверьте jsperf.com/data-vs-attr