none
Addon JQuery de filtrage sur une liste RRS feed

  • Question

  • Bonjour, 

    j'utilise un petit code pour filtrer mes listes.

    Le hic est que de tps en tps, il fige IE (9). Cad dire qu'il bloque l'affichage et le process utilise 200Mo de ram.

    Pourriez vous jeter un coup d'oeil pour vois se qui bloque IE (ou mieux, proposer un meilleur code !!!)

    merci.

    <script src="http://www.google.com/jsapi"></script><script>
    google.load("jquery", "1.2.6");
    google.setOnLoadCallback(function() { 
    $(document).ready(function()
    {              
                    jQuery.extend(jQuery.expr[':'], {
                      containsIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase())>=0"
                    });

                    $("table.ms-listviewtable tr.ms-viewheadertr").each(function()
                    {
                                   if($("td.ms-vh-group", this).size() > 0)
                                   {
                                                   return; 
                                   }
                                   
                                   var tdset = "";
                                   
                                   var colIndex = 0;
                                   
                                   $(this).children("th,td").each(function()
                                   {
                                                   if($(this).hasClass("ms-vh-icon"))
                                                   {
                                                                   // attachment
                                                                   tdset += "<td></td>";
                                                   }
                                                   else
                                                   {
                                                                   // filterable
                                                                   tdset += "<td><input type='text' class='vossers-filterfield' filtercolindex='" + colIndex + "' /></td>";                                                           
                                                   }
                                                   colIndex++;
                                   });
                                   var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
                                   
                                   $(tr).insertAfter(this);
                    });           
                    $("input.vossers-filterfield")
                                   .css("border", "1px solid #7f9db9")
                                   .css("width", "100%")
                                   .css("margin", "2px")
                                   .css("padding", "2px")
                                   .keyup(function()
                                   {                                             
                                                   var inputClosure = this;
                                                   if(window.VossersFilterTimeoutHandle)
                                                   {
                                                                   clearTimeout(window.VossersFilterTimeoutHandle);
                                                   }
                                                   window.VossersFilterTimeoutHandle = setTimeout(function()
                                                   {
                                                                   var filterValues = new Array();
                                                                   
                                                                   $("input.vossers-filterfield", $(inputClosure).parents("tr:first")).each(function()
                                                                   {                                                             
                                                                                  if($(this).val() != "")                                                      
                                                                                  {
                                                                                                  filterValues[$(this).attr("filtercolindex")] = $(this).val();
                                                                                  }
                                                                   });                           
                                                                   
                                                                                                                  
                                                                   $(inputClosure).parents("tr.vossers-filterrow").nextAll("tr").each(function()
                                                                   {
                                                                                  var mismatch = false;
                                                                                  
                                                                                  $(this).children("td").each(function(colIndex)
                                                                                  {
                                                                                                  if(mismatch) return;
                                                                                                  
                                                                                                  if(filterValues[colIndex])
                                                                                                  {
                                                                                                                  var val = filterValues[colIndex];
                                                                                                                  
                                                                                                                  // replace double quote character with 2 instances of itself
                                                                                                                  val = val.replace(/"/g, String.fromCharCode(34) + String.fromCharCode(34));                                                                                                       

                                                                                                                  if($(this).is(":not(:containsIgnoreCase('" + val + "'))"))
                                                                                                                  {
                                                                                                                                 mismatch = true;
                                                                                                                  }                                                                                            
                                                                                                  }
                                                                                  });
                                                                                  
                                                                                  if(mismatch)
                                                                                  {
                                                                                                  $(this).hide();
                                                                                  }
                                                                                  else
                                                                                  {
                                                                                                  $(this).show();
                                                                                  }                              
                                                                   });                                                          
                                                                   
                                                   }, 250);
                                   });
    });
    });</script><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>


    LUCBFT

    lundi 13 février 2012 12:55