2010-09-17 3 views
2

J'ai une tâche compliquée (pour moi) avec jQuery.jQuery scanne la table pour * et donne une couleur au parent

Je souhaite analyser une table entière pour ses éléments th. Si un élément th a un astérisque (*), je veux mettre en évidence le parent, qui est l'élément tr.

Je sais que cela semble compliqué quand je l'expliquer :)

Alors, imaginez que j'ai une table html dynamique où je veux activer une fonction de higlight certaines lignes. Par conséquent, je veux juste mettre un symbole (dans mon cas un astérisque *) à un texte à l'intérieur d'une cellule de tableau. Si jQuery détecte un astérisque à l'intérieur de th, il devrait automatiquement donner à son parent() un nom de classe!

Un départ serait probablement chaque fonction:

$(function() { 
    $("table tr th").each(function() { 
     $(this).parent().addClass("special");    
    }); 
}); 

, mais je ne sais pas comment numériser pour l'astérisque!

Répondre

3

Cela pourrait aider:

$(function() { 
    $("table tr th").each(function() { 
     if ($(this).text().indexOf('*') > -1)    
      $(this).closest('tr').addClass("special");    
    }); 
}); 

EDIT: Vous voudrez probablement le th lui-même d'avoir une classe special comme dans la démo here

+0

impressionnant merci! – matt

+0

ai aussi une idée comment je pourrais enlever l'aterisk après? donc c'est juste là pour savoir quel th/tr devrait être spécial, mais je ne veux pas le montrer dans la table. Y at-il une méthode de suppression de chaîne dans jquery? – matt

+0

Encore une fois, vous n'auriez besoin que du JavaScript natif '.replace()' pour cela - http://www.w3schools.com/jsref/jsref_replace.asp '$ (this) .addClass (" special "). Text ($ (this) .text(). replace ('*', '')); ' –

1

Voici une façon plus simple:

$("table tr th:contains('*')").parent().addClass("special"); 

Example at jsfiddle.

Modifier dans le commentaire de l'OP lecture:

Pour supprimer l'astérisque, vous aurez besoin d'itérer sur les éléments trouvés:

$("table tr th:contains('*')").each(function(){ 
    var $This=$(this); 

    $This.parent().addClass("special"); /* Add the "special" class */ 
    $This.text($This.text().replace("*","")); /* Remove the asterisk */ 
}); 

Example with asterisk removal.

Questions connexes