这是您应该考虑使用和创建的脚本。您还应该使用<ul>
and <li>
。
(function($){
$.tzFilter = function(jq, phrase, type, column, ifHidden){
var new_hidden = false;
if(this.last_phrase === phrase){
return false;
}
if(!type){
type = 'ul';
}
var phrase_length = phrase.length;
var words = phrase.toLowerCase().split(' ');
var matches = function(elem){
elem.show()
}
var noMatch = function(elem){
elem.hide();
new_hidden = true
}
var getText = function(elem){
return elem.text()
}
if(column){
var index = null;
if(type == 'table'){
jq.find('thead > tr:last > th').each( function(i){
if( $.trim($(this).text()) == column ){
index = i; return false;
}
});
} else if (type == 'ul'){
jq.find("li").each(function(i){
if(!$(this).attr('display', 'none')){
if( $.trim($(this).text()) == column ){
index = i; return false;
}
}
});
}
if(index == null){
throw('Index non trouvée: ' + column + '')
}
if(type == 'table'){
getText = function(elem){
return jQuery(elem.find(('td:eq(' + index + ')') )).text();
}
} else if (type == 'ul') {
getText = function(elem){
return jQuery(elem.find(('"li:eq(' + index + ')') )).text();
}
}
}
// On a simplement ajouté une lettre, on va regarder pour le nouveau mot, sans devoir tout regarder à nouveau
if((words.size > 1) && (phrase.substr(0, phrase_length - 1) === this.last_phrase)){
if(phrase[-1] === ' '){
this.last_phrase = phrase;
return false;
}
// On va chercher uniquement pour le nouveau mot
var words = words[-1];
// On cache uniquement les tables visibles
matches = function(elem) {;}
if(type == 'table'){
var elems = jq.find('tbody > tr:visible');
} else if (type == 'ul'){
var elems = jq.find('li:visible');
}
} else {
new_hidden = true;
if(type == 'table'){
var elems = jq.find('tbody > tr')
} else if (type == 'ul') {
var elems = jq.find('li')
}
}
elems.each(function(){
var elem = $(this);
$.tzFilter.has_words(getText(elem), words, false) ? matches(elem) : noMatch(elem);
});
last_phrase = phrase;
if(ifHidden && new_hidden){
ifHidden();
}
return jq;
};
// On cache pour accélérer le tout
$.tzFilter.last_phrase = ""
$.tzFilter.has_words = function(str, words, caseSensitive){
var text = caseSensitive ? str : str.toLowerCase();
for (var i=0; i < words.length; i++){
if(text.indexOf(words[i]) === -1){
return false;
}
}
return true;
}
})(jQuery);