2016-09-05 4 views
0

J'ai créé une fonction pour trouver des colonnes contenant un nombre, puis leur ajouter une classe et les colonnes suivantes avant que le code ne trouve une colonne vide. Je veux aussi ajouter la classe aux colonnes ci-dessous (les rangées suivantes mais les colonnes du même index) mais je ne peux pas le résoudre. J'ai essayé la méthode .parent() mais je suis bloqué et je ne sais pas ce que je fais pour être honnête ... Voici mon codejQuery: ajouter une classe aux colonnes de lignes égales du même index

$("table tbody tr td").each(function() { 
    var num = $(this).text(); 
    if ($.isNumeric(num)) { 
     $(this).addClass('word-' + num).nextUntil('td:empty').addClass('column-' + num); 
    } 
    }); 

Et l'image est là pour montrer ce que je veux faire (champs rouges). enter image description here

Désolé pour mon anglais.

+0

Pouvez-vous fournir votre code HTML et éventuellement ajouter un tableau supplémentaire en indiquant manuellement comment vous voulez obtenir le résultat final? Comme la question est maintenant, il est difficile de comprendre ce que vous espérez réaliser. –

+0

Voici mon jsfiddle: https://jsfiddle.net/5yzLftu0/ Exemple, le numéro 1 a le mot de classe-1, et la même classe est ajoutée au prochain td dans la même rangée. Mais je ne sais pas comment ajouter par exemple la classe mot-3 à td sous le numéro 3. Comprenez-vous maintenant? – user3043693

Répondre

1

Dans votre déclaration if, vous pouvez ajouter quelque chose le long des lignes de:

JS Fiddle

var indexed = $(this).index() + 1; // Get column number 
var row = $('tr').has(this); // Current row 
row.nextAll('tr').each(function(e) { 
    var cell = $(this).find('td:nth-child(' + indexed + ')'); 

    if(cell.text().length) { 
     cell.addClass('word-' + num); 
    } else { 
     return false; // End loop if word is finished 
    } 

}); 

Bonus

Si vous voulez un style où les mots se croisent (ont deux classes ci-joint qui commence par "word-", vous pourriez faire quelque chose comme:

/* Intersection */ 
[class^='word-'][class*=' word-'] { 
    font-weight: bold; 
    background: grey; 
    color: white; 
} 
0

Grand, qui est ce que je voulais :)

$("td").each(function() { 
    var num = $(this).text(); 
    if ($.isNumeric(num)) { 
     $(this).addClass('word-' + num).nextUntil('td:empty').addClass('word-' + num); 
     var indexed = $(this).index() + 1; 
     var row = $('tr').has(this); 
     row.nextAll('tr').each(function() { 
     var cell = $(this).find('td:nth-child(' + indexed + ')'); 
     if (cell.text().length) { 
      if (cell.find("[class*=word-]")) { 
      cell.attr('vertical', 'word-' + num); 
      cell.addClass('word-' + num); 
      } else { 
      cell.addClass('word-' + num); 
      } 
     } else { 
      return false; 
     } 
     }); 
    } 
    }); 

Je veux ajouter l'attribut « vertical », aux colonnes, qui a déjà la classe horizontale, je le fais bien ou mal?