Ответ 1
ваш фильтр будет работать, но вам нужно вернуть true для сопоставления объектов в функции, переданной фильтру, чтобы захватить их.
var $previous = $('.navlink').filter(function() {
return $(this).data("selected") == true
});
Скажем, у меня есть 4 элемента div с классом .navlink
, которые при нажатии кнопки .data()
устанавливают ключ с именем 'selected'
на значение true
:
$('.navlink')click(function() { $(this).data('selected', true); })
Каждый раз, когда нажимается новый .navlink
, я хотел бы сохранить ранее выбранный navlink
для более поздних манипуляций. Есть ли простой и простой способ выбора элемента на основе того, что было сохранено с помощью .data()
?
Кажется, что нет jQuery : filters, который соответствует счету, и я попробовал следующее (в рамках одного события кликов), но по какой-то причине он не работает:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Я знаю, что есть другие способы сделать это, но сейчас мне просто любопытно, можно ли это сделать через .data()
.
ваш фильтр будет работать, но вам нужно вернуть true для сопоставления объектов в функции, переданной фильтру, чтобы захватить их.
var $previous = $('.navlink').filter(function() {
return $(this).data("selected") == true
});
Только для записи вы можете фильтровать данные с помощью jquery (этот вопрос довольно старый, а с тех пор развивается jQuery, поэтому также правильно написать это решение):
$('.navlink[data-selected="true"]');
или, лучше (для производительности):
$('.navlink').filter('[data-selected="true"]');
или, если вы хотите получить все элементы с помощью data-selected
set:
$('[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, которая хранит ссылку на текущий выбранный элемент \jQuery.
2) Почему бы не добавить класс к выбранному в данный момент элементу. Затем вы можете запросить DOM для "активного" класса или чего-то еще.