2012-11-23 5 views
0

J'ai un problème jQuery avec lequel je pourrais utiliser de l'aide. J'essaye de déterminer une valeur basée sur des valeurs dans la table.Valeur de recherche basée sur l'entrée et la table de recherche

Voici le scénario:

  1. Une catégorie est sélectionnée. Cela détermine la colonne à utiliser. Voilà le code pour que:

    var column; 
    
    if($('input:radio[name=arc2-1]:checked').val() == 0 && $('input:radio[name=arc2-2]:checked').val() == 0) { 
    column = 2; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 0 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 3; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 1 && $('input:radio[name=arc2-2]:checked').val() == 0) { 
    column = 4; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 1 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 5; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 2 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 6; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 3 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 7; 
    } 
    
  2. Il y a une table cachée dans le code HTML qui ressemble à ceci:

    <table id="ms25"> 
        <tr> 
         <td>65</td> 
         <td>5.4</td> 
         <td>5.4</td> 
         <td>3.1</td> 
         <td>3.1</td> 
         <td>3.0</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>55</td> 
         <td>4.6</td> 
         <td>4.6</td> 
         <td>2.7</td> 
         <td>2.7</td> 
         <td>2.5</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>45</td> 
         <td>3.8</td> 
         <td>3.8</td> 
         <td>2.2</td> 
         <td>2.2</td> 
         <td>2.0</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>35</td> 
         <td>2.9</td> 
         <td>2.9</td> 
         <td>1.7</td> 
         <td>1.7</td> 
         <td>1.5</td> 
         <td>8.1</td> 
        </tr> 
    </table> 
    

Les valeurs dans les tableaux ne changent pas. Et il y aura toujours 7 colonnes et 11 rangées (j'ai raccourci l'exemple).

  1. Voici la partie délicate. Un nombre (65 ou moins) est entré dans un champ d'entrée . Puis:

  2. Le numéro d'entrée est vérifié par rapport à la première colonne de la table. Le numéro d'entrée est "arrondi au nombre suivant le plus proche au-dessus dans la colonne.

  3. Le numéro à trouver est celui de l'étape 1 et l'étape 4.

Par exemple, si la colonne est 4 et le numéro saisi est 31, vous iriez à la première colonne et trouver le prochain numéro le plus proche "arrondi" (35), puis vous allez à la colonne 4 ... et le nombre à trouver est 1,7.

J'ai trouvé des bribes qui se rapportent à une solution (comme ceci: jQuery find same td in prev. and next row), mais je ne sais pas comment tout mettre ensemble.

Toute aide/conseils quant à une solution ou où en chercher un serait grandement appréciée.

+0

Avez-vous pensé à itérer à travers la table à la page charge et tout en économisant un objet jquery. De cette façon, vous n'avez pas besoin de traverser le DOM à chaque fois et c'est plus rapide et plus pratique de travailler avec. Donc, vous obtiendrez quelque chose comme ceci: '{65: [5.4.5.4,3.1], 55: [4.6,4.6,4.6]}' – Andy

Répondre

1

Vous pouvez le faire comme ceci:

function get_table_value(column, value) { 
    table = $('#ms25'); 
    smallestdiff = Number.MAX_VALUE; 
    savedindex = 0; 
    table.find('td:first-child').each(function(i) { 
     diff = parseInt($(this).text(),10) - parseInt(value, 10); 
     if (diff > 0 && diff < smallestdiff) { 
      smallestdiff = diff; 
      savedindex = i; 
     } 
    }); 
    tr = table.find('tr:eq('+savedindex+')'); 
    alert (tr.find('td:first-child').text()); //alerts 35 
    alert (tr.find('td:nth-child('+column+')').text()); //alerts 1.7 
} 

Voir travail demo

+0

Nelson, cela a fonctionné parfaitement! Et une fois que j'ai parcouru le code, ligne par ligne, cela a finalement eu du sens pour moi. Merci encore. – user282648

Questions connexes