-1 votes

Optimisation du code jQuery

J'ai un code jQuery qui ressemble à quelque chose comme ceci

sur le clic du bouton 1

$('table.result_grid tbody tr')
    .filter(function() {
        var chkbox = $(this).find(':checkbox')[0];
        return !chkbox.checked;
    })
    .show();

sur le clic du bouton 2

 $('table.result_grid tbody tr')
     .filter(function() {
         var chkbox = $(this).find(':checkbox')[0];
         return !chkbox.checked;
     })
     .hide();

sur les deux clics il cherche le même tr.
Y a-t-il un moyen d'optimiser le code ci-dessus ?
Y a-t-il un moyen de stocker le tr ci-dessus dans une variable blah et ensuite dire blah.hide() o blah.show() .

1voto

Vitaliy Ulantikov Points 2834

Oui. Utilisez

var blah = $('table.result_grid tbody tr') .filter(function() { var chkbox = $(this).find(':checkbox')[0]; return !chkbox.checked; });
Button1.onClick=function(){blah.hide()};
Button2.onClick=function(){blah.show()};

0voto

searlea Points 3214

Quelque chose comme ça :

$('.button1, .button2').click(function() {
  $('table.result_grid tbody tr').
    filter(function() {
      var chkbox = $(this).find(':checkbox')[0];
      return !chkbox.checked;
    }).
    [$(this).is('.button1') ? 'hide' : 'show']();
});

0voto

Vous devriez être en mesure de sélectionner des cases à cocher non cochées à l'aide de la fonction :not et un sélecteur d'attributs.

$('table.result_grid tbody tr input:not([checked])').show();

0voto

geowa4 Points 17712

Tout d'abord, laissez les sélecteurs faire le travail. Vous ne ferez probablement pas mieux que l'efficacité de jQuery. Vous obtiendrez ainsi toutes les lignes qui contiennent des cases à cocher :

$('table.result_grid tbody tr:has(input:checkbox)')

Ensuite, choisissez des sélecteurs plus efficaces. C'est aussi une bonne idée pour votre CSS. Ici, j'ajoute ">" pour indiquer que la droite est une descendante directe de la gauche :

$('table.result_grid > tbody > tr:has(td > input:checkbox)')

Enfin, enregistrez la collection de lignes retournées :

var cached_rows = $('table.result_grid > tbody > tr:has(td > input:checkbox)')

Assurez-vous que le cached_rows est conservée dans une portée accessible à chacun de vos gestionnaires. Si vous ne voulez pas ou ne pouvez pas placer ces variables dans cette portée, faites attention en transmettant la référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X