Условный оператор jQuery $.data()

#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