2 votes

Javascript le plus haut numéro dans chaque tr, sautez 3 colonnes

J'ai un tableau, qui ajoutera une classe au plus grand nombre dans chaque tr.

Je veux qu'il saute les 3 premières colonnes et ne les recherche pas. Et ensuite, s'il y a plusieurs colonnes les plus élevées, les mettre en gras également.

Je vais coller le code ici ainsi que le bricolage.

HTML

    <style>
        .highest {
        font-weight: bold;
    }
    </style>

<table width="300">
    <tr>
        <th>no</th>
        <th>no</th>
        <th>no</th>
        <th>yes</th>
        <th>yes</th>
        <th>yes</th>
    </tr>    
    <tr>
        <td>150</td>
        <td>name</td>
        <td>10.5</td>
        <td>1.5</td>
        <td>12</td>
        <td>9.3</td>
    </tr>
    <tr>
        <td>12.0</td>
        <td>name</td>
        <td>150</td>
        <td>150</td>
        <td>13.5</td>
        <td>150</td>
    </tr>
    <tr>
        <td>160</td>
        <td>name</td>
        <td>115</td>
        <td>15</td>
        <td>11</td>
        <td>160</td>
    </tr>
    <tr>
        <td>145</td>
        <td>name</td>
        <td>151</td>
        <td>12</td>
        <td>18</td>
        <td>18</td>
    </tr>
</table>

JAVASCRIPT

jQuery(function($) {
    $.fn.max = function(callback) {
        var max = null,
            maxIndex = null;

        this.each(function() {
            var value = callback.call(this);
            if (+value === value) {
                if (!max || value > max) {
                    max = value;
                    maxIndex = $(this).index();
                }
            }

        });
        return max !== null ? this.eq(maxIndex) : $();
    };
}(jQuery));

$('tr').each(function() 
    $(this).children('td').max(function() {
        var value = +$(this).text();
        if (!isNaN(value)) {
            return value;
        }
    }).addClass('highest');
});

FIDDLE

http://jsfiddle.net/65S7N/96/

4voto

adeneo Points 135949

Il suffit d'ajouter un sélecteur comme paramètre au plugin, et de filtrer par ce biais :

jQuery(function($) {
    $.fn.max = function(selector) {
        var elems = $();
        this.each(function() {
            var max = 0,
                ele = $(this).find(selector).each(function(i,el) {
                var n  = parseFloat($(el).text());
                if ( n > max ) max = n;
            }).filter(function() {
                return parseFloat($(this).text()) === max;
            });
            elems = elems.add(ele);
        });
        return elems;
    };
}(jQuery));

$('tr').max('td:gt(2)').addClass('highest');

FIDDLE

0voto

Barmar Points 135986

Pour sauter les 3 premières colonnes, utilisez :

$(this).children('td').filter(function(i) {
    return i > 2;
}).max(...)

La fonction de filtrage reçoit la position basée sur le zéro de l'élément dans la collection.

Si vous voulez mettre en évidence plusieurs entrées qui ont la valeur maximale, maxIndex doit être un tableau, et non une valeur unique. Lorsque value === max pour pousser l'index courant dans le tableau. Vous pouvez aussi en faire une collection d'éléments jQuery, plutôt que des index, et y ajouter l'élément actuel.

0voto

Prasanth Points 4177
$('tr').each(function(){
    var this = $(this);
    var max = -Infinity;
    var indexes = [];
    this.find('td:gt(2)').each(function(index){
        var this_num = ($(this).text() >> 0);
        if ( max < this_num ) {
            max = this_num;
            indexes = [index];
        } else if (max == this_num ) {
            indexes.push(this_num);
        }
    });
    $(indexes).each(function(index){
        this.find('td:eq('+index+')').addClass('highest');
    });
});

Cela devrait fonctionner, mais je n'ai pas encore testé :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X