2017-10-10 5 views
-1

J'ai une table avec 2 colonnes "id" (valeur unique) et "nom". En utilisant jQuery je voudrais retourner le nombre (.length) de lignes où l'ID correspond à un tableau d'identifiants (par exemple SR1, B1, B2) ET la valeur dans le champ "nom" pour ces lignes est vide.Jquery trouver le nombre de lignes de table avec des valeurs spécifiques dans 2 colonnes

Jusqu'à présent, j'ai:

var empty = $('[tabulator-field="name"]:empty').length; 
var sr1 = $('.tabulator-row:nth-of-type(29) [tabulator-field="name"]:empty').length; 
var sr2 = $('.tabulator-row:nth-of-type(30) [tabulator-field="name"]:empty').length; 
var b1 = $('.tabulator-row:nth-of-type(7) [tabulator-field="name"]:empty').length; 
var b2 = $('.tabulator-row:nth-of-type(8) [tabulator-field="name"]:empty').length; 
var c10 = $('.tabulator-row:nth-of-type(27) [tabulator-field="name"]:empty').length; 
var c11 = $('.tabulator-row:nth-of-type(28) [tabulator-field="name"]:empty').length; 
var emptySR = sr1 + sr2 + b1 + b2 + c10 + c11; 
var emptyBeds = empty - emptySR; 

Cependant, cela semble être un moyen inefficace de calculer cela et de plus, en sélectionnant les lignes que je suis intéressé par leur position dans le tableau (plutôt que par leurs valeurs d'identité) using: nth-of-type renvoie des résultats incorrects si la table est triée par un champ différent car l'ordre des lignes changera.

S'il vous plaît quelqu'un peut-il suggérer une fonction robuste pour réaliser ce dont j'ai besoin?

+1

S'il vous plaît cliquer sur le '<>' et afficher un [mcve] – mplungjan

+0

Je ne sais pas pourquoi je dois poster un exemple - c'est une question directe sur la sélection et des éléments de filtrage en utilisant jQuery et le contexte est bien décrit dans mon premier paragraphe. –

+0

@TomHeaps Une épinette du html réel serait utile. – nurdyguy

Répondre

1

Utilisez un sélecteur pour faire correspondre le champ vide, puis utilisez une fonction de filtre pour tester si l'ID est dans le tableau.

var bedIds = ['SR1', 'SR2', 'B1', 'B2', 'C10', 'C11']; 
var emptyBeds = $('.tabulator-row:has([tabulator-field="name"]:empty) [tabulator-field="id"]').filter(function() { 
    return bedIds.indexOf(this.textContent) != -1; 
}).length; 
+0

Merci beaucoup pour votre réponse rapide - ce code fait exactement ce dont j'avais besoin et d'une bien meilleure façon que ce que j'aurais pu écrire! –