Скажем, у меня есть 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()
.
$("*").filter(function() { return $(this).data("DATA IDENTIFIER HERE") == DATA VALUE HERE; });
Просто для записи вы можете фильтровать данные с помощью jquery (этот вопрос довольно старый, и с тех пор jQuery эволюционировал, поэтому также правильно написать это решение):
или лучше (по производительности):
или, если вы хотите получить все элементы с помощью
data-selected
set:Обратите внимание, что этот метод будет работать только с данными, которые были установлены через атрибуты html. Если вы установите или измените данные с помощью
.data()
вызова, этот метод больше не будет работать.источник
.data()
методом вместоdata-
атрибута. См. Эту скрипку: jsfiddle.net/bryandowning/tySWC - Кроме того,.find()
метод выполняет поиск дочерних элементов предыдущего селектора. В приведенном примереdata-selected
является атрибутом.navlink
, а не дочерним элементом.navlink
. Также$('div p')
и$('div').find('p')
по сути эквивалентны. Использование.find()
кажется , что это может быть медленнее из - за вызов дополнительной функции (хотя я не уверен по этому поводу). Пожалуйста, поправьте меня, если я ошибаюсь в этом (я действительно хочу, чтобы этот метод работал)..data()
, поскольку jQuery выполняет поиск в DOM, я опубликовал его для тех (таких как я), кто попал в этот вопрос по другим причинам; 2) правильно,.find()
перебирает дочерние элементы, поэтому в данном примере это неправильно; 3) Вы ошибаетесь, они не эквивалентны, так как jQuery выполняет поиск справа налево, см. Jonraasch.com/blog/…$('[data-selected]')
это помогло мне в чем-то вроде$('ul.categories a[data-categories_id]').click(......);
Мы можем довольно легко сделать плагин:
Использование (установка переключателя):
источник
Я заметил две вещи (хотя они могут быть ошибками, когда вы это записали).
$('.navlink').click
)return $(this).data("selected")==true
)источник
Похоже, работы больше, чем ее стоит.
1) Почему бы просто не иметь единственную переменную JavaScript, которая хранит ссылку на текущий выбранный объект element \ jQuery.
2) Почему бы не добавить класс к текущему выбранному элементу. Затем вы можете запросить в DOM класс «.active» или что-то в этом роде.
источник