2009-06-10 11 views
2

J'ai une table, et j'ai fait le tri de cela. Son temps d'exécution est mauvais. Je suppose que c'est à cause de la manipulation DOM. /* I m convertir au tableau */sélection DOM dans jquery

var rows = $table.find('tbody > tr').get(); 


$.each(rows, function(index, row){  /*then again to 2D array */ 

      if(($(row).children('td').eq(0).attr('class').indexOf('collapse') != -1 || $(row).children('td').eq(0).attr('class').indexOf('expand') != -1)){ 
       myData.push(myData1); 
       myData1 = []; 
      } 
       myData1.push(row); 
       rowCount++; 
       if(rowCount == $(rows).length){ // to assign last group of rows 
       myData.push(myData1); 
        myData1 = []; 

      } 
    }); 

qui est la meilleure façon de sélectionner les éléments DOM directement tableau complet. Parce que je l'utilise plusieurs fois.

+0

Ne pas rediffuser: http: // stackoverflow. com/questions/974435/comment-améliorer-performance-dans-jquery –

Répondre

1

Eh bien, il y a une chose que vous pouvez faire tout de suite qui augmentera probablement la performance:

Vous voyez la chaîne Loong vous devez obtenir les valeurs de la classe de la première <td> de la ligne? Vous faites exactement la même chose, loong, chaîne deux fois. Essayez

// then again to 2D array 
$.each(rows, function(index, row) { 
    var classes = $(row).children('td').eq(0).attr('class') 
    if((classes.indexOf('collapse') != -1 || classes.indexOf('expand') != -1)){ 
     myData.push(myData1); 
     myData1 = []; 
    } 
    myData1.push(row); 
    rowCount++; 
    if(rowCount == $(rows).length){ // to assign last group of rows 
     myData.push(myData1); 
     myData1 = []; 
    } 
}); 

Si la fonction $.each() gère un grand nombre de fois, cela devrait vous sauver au moins quelques-uns.

+0

merci Tomas, y at-il une autre fonction pour $ .each() – vinay

+0

Il est difficile de dire s'il y a, ne sachant pas ce que vous essayez réellement accomplir. Voir la suggestion d'Adrian aussi - est-ce que la performance est assez bonne si vous implémentez les deux? –

1

Vous pouvez également essayer la fonction hasClass, et en utilisant le: premier sélecteur au lieu de retourner tous les tds et seulement prendre le premier:

if(($(row).children('td:first').hasClass('collapse')) || ($(row).children('td:first').hasClass('expand')) {