Расширение селекторов атрибутов jQuery - PullRequest
1 голос
/ 19 октября 2010

У меня есть встроенное всплывающее окно, которое показывает список флажков и связанных ярлыков, каждый в отдельном элементе span. Я хочу добавить текстовое поле, где пользователь может напечатать, чтобы отфильтровать значения (имена пользователей) во всплывающем окне. У меня есть следующий код:

$("#toEmpFilter").live("change", function () {

            var FilterVal = $(this).val();
            $("input.boxes").not("[title*=" + FilterVal + "]").each(function () {
                $(this).parent("span.clscheck").hide();
            });
          $("input.boxes[title*=" + FilterVal + "]").each(function () {
                $(this).parent("span.clscheck").show();
            });

        });   

Значения меток копируются в поле заголовка, как <input type="text" title="john woo"/>. Этот код работает нормально. Единственная проблема с ним - title*=FilterVal делает сравнение чувствительным к регистру, а мне нужно сравнение без учета регистра.

Я провел некоторое исследование, но могу найти только расширение: расширение как ключевые слова, в отличие от *= или $= операторов.

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Вы можете передать функцию на .not() и нормализовать регистр на обоих концах.

var FilterVal = $(this).val().toLowerCase(); // change to lower case

$("input.boxes").not(function() {
          // change title to lower case and compare
      return this.title.toLowerCase().indexOf( FilterVal ) > -1;
}).each(function () {
    $(this).parent("span.clscheck").hide();
});

РЕДАКТИРОВАТЬ: Не заметил, что вы не делалиточное сравнение.Исправлено для репликации атрибута содержит сравнение.

И вы могли бы сократить свой код следующим образом:

   $("#toEmpFilter").live("change", function () {
        var FilterVal = $(this).val().toLowerCase();

        $("input.boxes").each(function () {
            $(this).parent("span.clscheck")
                   .toggle( this.title.toLowerCase().indexOf( FilterVal ) > -1 );
        });
    });

Таким образом, вы выбираете элементы только один раз.

0 голосов
/ 19 октября 2010

Используйте

var FilterVal = $(this).val().toLowerCase()

, тогда FilterVal всегда будет в нижнем регистре.

При условии, что заголовок * также всегда в нижнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...