Фильтрующий элемент на основе.данных() ключ/значение
скажем, у меня есть 4 div-элемента с классом .navlink, который, при нажатии, используйте .data() установить ключ под названием 'selected', стоимостью true:
$('.navlink')click(function() { $(this).data('selected', true); })
каждый раз новый .navlink нажата, я хотел бы сохранить ранее выбранный navlink для последующих манипуляций. Есть быстрый и простой способ, чтобы выбрать элемент на основе того, что было сохранено с помощью .data()?
кажется, нет никакого jQuery фильтры это подходит, и я попытался следующее (в том же событии щелчка), но по какой-то причине это не работает:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Я знаю, что есть и другие способы сделать это, но сейчас мне в основном просто любопытно, если это можно сделать через .data().
5 ответов:
ваш фильтр будет работать, но вам нужно вернуть true на соответствующие объекты в функции, переданной фильтру для его захвата.
var $previous = $('.navlink').filter(function() { return $(this).data("selected") == true });
просто для протокола, ты можете фильтр по данным с помощью jquery (этот вопрос довольно старый, и jQuery эволюционировал с тех пор, поэтому правильно написать и это решение):
$('.navlink[data-selected="true"]');или, лучше (по производительности):
$('.navlink').filter('[data-selected="true"]');или, если вы хотите получить все элементы с
data-selectedset:$('[data-selected]')Примечание что этот метод будет работать только с данными, которые были установлены через html-атрибуты. Если вы устанавливаете или изменяете данные с помощью
.data()вызов, этот метод больше не будет работать.
мы можем сделать плагин довольно легко:
$.fn.filterData = function(key, value) { return this.filter(function() { return $(this).data(key) == value; }); };использование (проверка переключателя):
$('input[name=location_id]').filterData('my-data','data-val').prop('checked',true);
две вещи, которые я заметил (они могут быть ошибки, когда вы записали его, Хотя).
- вы пропустили точку в первом примере (
$('.navlink').click)- для работы фильтра необходимо вернуть значение (
return $(this).data("selected")==true)
звучит как больше работы, чем его стоит.
1) Почему бы просто не иметь одну переменную JavaScript, которая хранит ссылку на текущий выбранный объект element\jQuery.
2) Почему бы не добавить класс к выделенному элементу. Затем вы можете запросить DOM для ".активный " класс или что-то в этом роде.
Comments