1

我正在使用jQuery Isotope并想要实现元素搜索。当用户在文本框中键入内容时,我将过滤器选项更改如下:

var newFilter = '[data-myAttr*="' + $('#mySearchBox').val() + '"]';
$('#myIsotopeContainer').isotope({filter: newFilter});

我正在使用 jQuery 的属性 contains selector。但它区分大小写,我想区分大小写我怎样才能做到这一点?

我查看了建议使用的其他问题和谷歌结果.filter(fn),但我对同位素没有太多控制。我只是给它一个选择器。

4

3 回答 3

3

通过查看 Isotope 的来源,您应该能够传递一个函数,如下所示:

$('#myIsotopeContainer').isotope({ filter: function() {
        // case-insensitive pattern match:
        var pattern=new RegExp($('#mySearchBox').val(),'i');

        // test against 'data-myAttr':
        return pattern.test(this.attr('data-myAttr'));
    }
});

Isotope 只需.filter()调用它自己的过滤即可。试一试,看看会发生什么。

于 2012-02-29T01:57:26.140 回答
1

使用小写作为所有属性的协议,然后将用户输入更改为小写

于 2012-02-29T03:39:38.610 回答
0

我想为像我这样做这件事有点不同的人给出一个与这个问题相关的答案。我想搜索整个元素(或元素的任何子元素)中的任何文本,而不仅仅是一个属性。如果您使用 :contains 选择器并希望它不区分大小写,则应按照此错误报告中的概述扩展 JQuery 。为方便起见,我在下面发布代码:

$.extend($.expr[':'], {
  'containsi': function(elem, i, match, array)
  {
    return (elem.textContent || elem.innerText || '').toLowerCase()
    .indexOf((match[3] || "").toLowerCase()) >= 0;
  }
});

现在您可以像使用 :contains('SomeString') 一样使用 JQuery,但现在使用新的扩展 :containsi('SomeString')

于 2012-04-19T13:48:16.747 回答