2

我有这个城市列表(复选框和标签)和一个输入字段:

<input class="search-filter" type="text"/>
<form autocomplete="off" id="city-search-form" name="city-search-form" action="" method="">
   <div id="list" class="multiselect">
      <input id="city-id-1" class="css-checkbox" type="checkbox" />
      <label for="city-id-1" name="" class="css-label">abc</label>

      <input id="city-id-2" class="css-checkbox" type="checkbox" />
      <label for="city-id-2" name="" class="css-label">bce</label>

      <input id="city-id-3" class="css-checkbox" type="checkbox" />
      <label for="city-id-3" name="" class="css-label">cde</label>

      <input id="city-id-4" class="css-checkbox" type="checkbox" />
      <label for="city-id-4" name="" class="css-label">rgp</label>
   </div>
</form>

我正在使用此 jquery 代码按我输入的单词过滤复选框 + 标签,但该代码不起作用。我如何过滤并仅显示以键入的单词开头的标签。

function listFilter(list) {
    var input = $('.search-filter');

    $(input)
    .change( function () {

        var filter = input.val();

        $('.css-label').filter(function(filter) {

            if($('.css-label').text().search(filter) == 0){
                .....hide();
            }
            else {
              .......show();
            }
        });
      })
    .keyup(function () {
        input.change();
        .....
        } 

    });
  }
  $(function () {
    listFilter($("#list"));
  });
}($));
4

4 回答 4

5

尝试

function listFilter(list, input) {
    var $lbs = list.find('.css-label');

    function filter(){
        var regex = new RegExp('\\b' + this.value);
        var $els = $lbs.filter(function(){
            return regex.test($(this).text());
        });
        $lbs.not($els).hide().prev().hide();
        $els.show().prev().show();
    };

    input.keyup(filter).change(filter)
}

jQuery(function($){
    listFilter($('#list'), $('.search-filter'))
})

演示:小提琴

于 2013-07-30T06:07:52.563 回答
2

您可以使用:contains()选择器进行过滤:

var input = $('.search-filter');
input.change( function () {
        var filter = input.val();
        if(filter.length == 0) { // show all if filter is empty
           $('.css-label').each(function() {
             $(this).show();   
             $(this).prev().show();
           });
           return;
        }

        // hide all labels with checkboxes
         $('.css-label').each(function() {
             $(this).hide();   
             $(this).prev().hide();
         }); 

        // show only matched
        $('.css-label:contains("'+filter+'")').each(function() {
            $(this).show();   
            $(this).prev().show();
        });
}).keyup(function() {
    $(this).change();    
});

jsfiddle

于 2013-07-30T06:07:25.933 回答
1

被认为是正确的为时已晚,但这是我在工作受到阻碍之前正在努力的尝试。我想我也可以发布它。

它不区分大小写并支持多个单词(感谢 Arun P Johny)。

演示

$('.search-filter').keyup(function (e) {
    var text = $(this).val();
    var $elems = $('.css-label, .css-checkbox');

    if (text.length < 1) {
      $elems.show();
    }
    else{
        $elems.hide();    
        var sel = $('label').filter(function () {
           return $(this).text().match("\\b", "i" + text)
        }).attr('for');

        $('#'+sel + ',[for=' + sel + ']').show();                             
    }
});
于 2013-07-30T13:54:12.207 回答
-1

我在下面有一个代码来获取标签名称

<!DOCTYPE html>
<html>
<head>

<SCRIPT src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</SCRIPT>

<SCRIPT>
$(document).ready(function(){

alert($(".css-label").text());
});
</SCRIPT>

</head>
<body>
<div id="list" class="multiselect">
      <input id="city-id-1" class="css-checkbox" type="checkbox" />
      <label for="city-id-1" name="" class="css-label">abc</label>
</div>
</body>
</html>

希望对你有帮助

于 2013-07-30T06:21:39.267 回答