2013-06-27 1 views
2

Изучив некоторые другие вопросы, связанные с этим, я до сих пор не смог понять, как заставить это работать в моем случае. У меня есть таблица с несколькими строками и элемент управления над ним, который мне нужно отфильтровать на основе того, что набирается. В каждой строке есть кнопка «Удалить», которую я не подключил в своем jsFiddle. Это отлично работает на моей реальной странице.Использовать ввод в строки таблицы фильтра

Моя основная проблема связана с самим фильтром. Он определенно не фильтрует правильно, и я понятия не имею, как принять во внимание кнопку «Удалить». Что мне нужно сделать, когда я начну вводить фильтр, текст кнопки («Удалить») будет проигнорирован, и строки будут правильно фильтроваться?

Вот пол работает jsFiddle и «пол-работает» я имею в виду, если вы вводите букву «г», все фильтруется, но один ряд. Большинство букв, которые вы набираете, все фильтруется.

Фильтр Код

<script> 
$("#searchFilter").keyup(function() { 
    var data = this.value.split(" "); 
    var tbl = $("#table1").find("tr"); 
    if (this.value == "") { 
     tbl.show(); 
     return; 
    } 
    tbl.hide(); 
    tbl.filter(function (i, v) { 
     var t = $(this); 
     for (var d = 0; d < data.length; d++) { 
      if (t.is(":contains('" + data[d] + "')")) { 
       return true; 
      } 
     } 
     return false; 
    }).show(); 
}); 
</script> 


Благодаря этой должности я был в состоянии получить немного старт, но просто застрял сейчас ...: https://stackoverflow.com/a/17075148/738262



РАБОТА КОД

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) { 
    return function(elem) { 
     return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 
    }; 
}); 

$("#searchFilter").keyup(function() { 
    var data = this.value.split(" "); 
    var tbl = $("#table1").find("tr"); 
    if (this.value == "") { 
     tbl.show(); 
     return; 
    } 
    tbl.hide(); 
    tbl.filter(function (i, v) { 
     var t = $(this); 
     for (var d = 0; d < data.length; d++) { 
      if (t.is(":Contains('" + data[d] + "')")) { 
       return true; 
      } 
     } 
     return false; 
    }).show(); 
}); 

ответ

3

:contains есть с учетом регистра. Когда вы вводите r, он не находит Running, всего Bar.

Также в цикле for должен быть d++.

+0

Хорошо, что это очень хорошо знать. Я не знал, что: содержит чувствительность к регистру. Очень признателен. Кроме того, в другом посте, на котором я смотрел, это было ++ d, я просто забыл исправить это, когда я переформатировал его в своем вопросе, но теперь он исправлен. Я посмотрел, как сделать: содержит регистр без учета регистра и нашел одну работу (хотя мне это действительно не нравится, и я уверен, что есть намного лучший способ, который я продолжу искать). Я обновляю свой OP с этой работой. И еще раз спасибо за помощь! – Brian