Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/08/2012, 02:49
CorpseOfSteel
 
Fecha de Ingreso: julio-2007
Ubicación: Málaga
Mensajes: 600
Antigüedad: 17 años, 5 meses
Puntos: 56
Acentos en uiTableFilter

Hola, estoy usando el script de uiTableFilter en una de mis webs. Esta muy bien este script pero es bastante básico.

Consiste en un pequeño buscador que muestra resultados en tiempo real. Pero mi problema son los acentos, cuando quieres buscar un artículo de la web tienes que hacerlo añadiendo los acentos. Por ejemplo si el título de un artículo es "Árbol" y buscas "arbol" sin acento, no te muestra el resultado.

He encontrado en el foro información sobre como sustituir los acentos, pero no se como acoplarlo al uiTableFilter.

El código del uiTableFilter es el siguiente:

Código:
(function($) {
  $.uiTableFilter = function(jq, phrase, column, ifHidden){
    var new_hidden = false;
    if( this.last_phrase === phrase ) return false;

    var phrase_length = phrase.length;
    var words = phrase.toLowerCase().split(" ");

    // these function pointers may change
    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;
      jq.find("thead > tr:last > th").each( function(i){
        if( $.trim($(this).text()) == column ){
          index = i; return false;
        }
      });
      if( index == null ) throw("given column: " + column + " not found")

      getText = function(elem){ return $(elem.find(
        ("td:eq(" + index + ")")  )).text()
      }
    }

    // if added one letter to last time,
    // just check newest word and only need to hide
    if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) ===
          this.last_phrase) ) {

      if( phrase[-1] === " " )
      { this.last_phrase = phrase; return false; }

      var words = words[-1]; // just search for the newest word

      // only hide visible rows
      matches = function(elem) {;}
      var elems = jq.find("tbody:first > tr:visible")
    }
    else {
      new_hidden = true;
      var elems = jq.find("tbody:first > tr")
    }

    elems.each(function(){
      var elem = $(this);
      $.uiTableFilter.has_words( getText(elem), words, false ) ?
        matches(elem) : noMatch(elem);
    });

    last_phrase = phrase;
    if( ifHidden && new_hidden ) ifHidden();
    return jq;
  };

  // caching for speedup
  $.uiTableFilter.last_phrase = ""

  // not jQuery dependent
  // "" [""] -> Boolean
  // "" [""] Boolean -> Boolean
  $.uiTableFilter.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);

Agradecería mucho cualquier ayuda.

Muchas gracias por adelantado