Фильтрующий элемент на основе.данных() ключ/значение



скажем, у меня есть 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().

472   5  

5 ответов:

ваш фильтр будет работать, но вам нужно вернуть 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);

две вещи, которые я заметил (они могут быть ошибки, когда вы записали его, Хотя).

  1. вы пропустили точку в первом примере ( $('.navlink').click)
  2. для работы фильтра необходимо вернуть значение (return $(this).data("selected")==true)

звучит как больше работы, чем его стоит.

1) Почему бы просто не иметь одну переменную JavaScript, которая хранит ссылку на текущий выбранный объект element\jQuery.

2) Почему бы не добавить класс к выделенному элементу. Затем вы можете запросить DOM для ".активный " класс или что-то в этом роде.

Comments

    Ничего не найдено.