2010-10-19 3 views
3

ok dire que nous avonsmeilleure façon jquery pour trouver et filtrer et appliquer des classes CSS

<span class="foo">7</span> 
<span class="foo">2</span> 
<span class="foo">9</span> 

et que vous souhaitez appliquer une classe css de « plus haut » à « span.foo'.text> 7 classe et css de milieu à des valeurs> 4 et 7 < = et de classe css de la plus basse à < = 4

exemple de résultat souhaité:

<span class="foo medium">7</span> 
<span class="foo lowest">2</span> 
<span class="foo highest">9</span> 

Est-ce un trouver et filtrer la situation? Je suis sûr que c'est commun, mais je n'arrive pas à trouver le meilleur moyen de l'écrire. Merci

Répondre

5
$("span.foo").each(function(){ 
    var num = parseInt(this.innerHTML, 10); 
    if (num > 7) 
    this.className += " highest"; 
    else if (num <= 4) 
    this.className += " lowest"; 
    else 
    this.className += " medium"; 
}); 
+0

+1 Ceci est plus efficace que le mien, car il ne crée pas de nouveaux objets jQuery. Je préfère le mien mais comme une réponse SO ... ';-)' J'ai corrigé votre faute de frappe dans le second conditionnel. – lonesomeday

+0

bien, merci l'homme :) – galambalazs

4

Vous pouvez le faire avec find/filter. Il serait plus facile de le faire avec each:

$('span.foo').each(function(){ 
    var $this = $(this), 
     val = parseInt($this.html(),10); 

    if (val > 7) { 
     $this.addClass('highest'); 
    } else if (val <= 4) { 
     $this.addClass('lowest'); 
    } else { 
     $this.addClass('medium'); 
    } 
}); 
+2

Vous devez ajouter un deuxième paramètre de 10 à parseInt() https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt – Yahel

+0

Vous avez raison, je devrais. – lonesomeday

1
$(".foo").each(function() 
       { 
       var layer=$(this); 
       var val=parseInt(layer.text()); 

       if(val>7)layer.addClass("highest") 
        else 
       if(val>4 && val<=7)layer.addClass("medium"); 
        else { 
         layer.addClass("lowest"); 
        }     
       }); 

Ici vous avez: http://jsfiddle.net/dactivo/n6GvJ/

Si vous préférez avec filtre même si elle est moins efficace:

$('.foo').filter(function(index) { 
    return parseInt($(this).text())>7 
     }).addClass("highest"); 

$('.foo').filter(function(index) { 
    return (parseInt($(this).text())>4 && parseInt($(this).text())<=7) 
}).addClass("medium"); 

$('.foo').filter(function(index) { 
    return parseInt($(this).text())<=4 
}).addClass("lowest"); 

Comme ici: http://jsfiddle.net/dactivo/5tGsj/

+0

Je pense qu'il vous manque un parseInt() pour le nombre. Ajoutant que c'est la façon dont je le ferais;) – pjnovas

+0

C'est vrai, ajouté, merci. – netadictos

Questions connexes