2010-03-29 5 views
0

J'essaye d'écrire un simple morceau de Jquery dans lequel le script vérifiera si une cellule de table contient une plage de nombres.Jquery - mettre des variables dans: contains()

Je ne suis pas sûr comment faire, parce que si vous deviez faire quelque chose comme ceci:

var num_range = ">1"; 
$("td:contains(" + num_range + ")").css('background-color', '#000'); 

... le script détecte que si le td contient le texte exact « > 1 », plutôt que ce que je suis après, il détecte si les tds contiennent des nombres supérieurs à 1. (Tout en style de l'arrière-plan)

Merci pour toute aide, je suis un novice Javascript/Jquery!

Répondre

4

Il n'y a pas de sélecteur jQuery natif pour cela. Vous pouvez écrire un si vous voulez ou simplement utiliser:

$("td").each(function() { 
    if (parseInt($(this).text()) > 1) { 
    $(this).css("background", "#000"); 
    } 
}); 

Si vous voulez créer votre propre sélection:

$.extend($.expr[":"], { 
    expr: (function() { 
    var op = { 
     '=': function(n1, n2) { return n1 == n2; }, 
     '!=': function(n1, n2) { return n1 != n2; }, 
     '>': function(n1, n2) { return n1 > n2; }, 
     '>=': function(n1, n2) { return n1 >= n2; }, 
     '<': function(n1, n2) { return n1 < n2; }, 
     '<=': function(n1, n2) { return n1 <= n2; } 
    }; 
    var ops = []; 
    for (p in op) { 
     ops.push(p); 
    } 
    var r = new RegExp("^\\s*(" + ops.join("|") + ")\\s*(-?\\d+(?:\\.\\d+)?)\\s*$"); 
    return function(elem, i, match) { 
     var m = r.exec(match[3]); 
     return m && op[m[1]](parseFloat($(elem).text()), parseFloat(m[2])); 
    }; 
    })() 
}); 

Et vous pouvez faire:

$("td:expr(>5)").css("background", "yellow"); 
1

Il n'y a pas sélecteur intégré dans jQuery qui fait cela.

Vous pouvez utiliser .filter pour financer manuellement les éléments. (en appelant le .text dans le filtre)

Questions connexes