代码之家  ›  专栏  ›  技术社区  ›  user113716

基于.data()键/值的筛选器元素

  •  109
  • user113716  · 技术社区  · 15 年前

    假设我有4个div元素和类 .navlink ,单击时,将使用 .data() 设置一个名为 'selected' ,至 true :

    $('.navlink')click(function() { $(this).data('selected', true); })
    

    每次都有一个新的 .导航链接 navlink 用于以后的操作。是否有一种快速简便的方法可以根据使用存储的内容选择元素 ?

    似乎没有任何jQuery :过滤器 这符合要求,我尝试了以下方法(在同一个单击事件中),但由于某些原因,它不起作用:

    var $previous = $('.navlink').filter( 
        function() { $(this).data("selected") == true }
    );
    

    我知道还有其他方法可以做到这一点,但现在我很好奇是否可以通过 .data() .

    5 回复  |  直到 9 年前
        1
  •  176
  •   BaroqueBobcat    15 年前

    您的过滤器可以工作,但是您需要在传递给过滤器的函数中的匹配对象上返回true,以便它获取它们。

    var $previous = $('.navlink').filter(function() { 
      return $(this).data("selected") == true 
    });
    
        2
  •  127
  •   Chronial    10 年前

    记录在案,你 使用jquery对数据进行过滤(这个问题很老了,jquery从那时起就发展起来了,所以编写这个解决方案也是正确的):

    $('.navlink[data-selected="true"]');
    

    或者,更好的(性能):

    $('.navlink').filter('[data-selected="true"]');
    

    或者,如果您想使用 data-selected 设置:

    $('[data-selected]')
    

    笔记 该方法只适用于通过html属性设置的数据。如果使用设置或更改数据 .data() 调用时,此方法将不再有效。

        3
  •  13
  •   mpen    6 年前

    $.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);
    
        4
  •  8
  •   Bryan Downing    11 年前

    1. 你在第一个例子中漏掉了一个点( $('.navlink').click )
    2. 要使筛选器工作,必须返回一个值( return $(this).data("selected")==true )
        5
  •  -1
  •   Bryan Migliorisi    15 年前

    听起来工作太多了。

    1) 为什么不使用一个JavaScript变量来存储对当前选定元素\jQuery对象的引用呢。

    2) 为什么不向当前选定的元素添加一个类呢。然后可以在DOM中查询“.active”类或其他内容。