2016-07-29 19 views
0

Ich versuche, die Position eines Eingabewerts aus einer Liste von Eingabewerten in einer Tabelle zu finden und dann die Position anzuzeigen. Dies ist nach dem Sortieren der Werte vom höchsten zum niedrigsten Wert.Finden Sie die Position einer Zahl aus einer Liste von sortierten Zahlen in einer Tabelle

Im folgenden Beispiel erwarte ich, dass die Eingabe mit dem Wert 10 die Position 2 ist. Wenn ich es mit der Eingabe mit dem Wert 45 testen würde, wäre die Position gleich 1 und so weiter.

Ich habe den Code unten versucht, aber ich bekomme eine Position -1

<script type="text/javascript"> 
 
    // Get the values as numbers 
 
    var marks = document.getElementsByClassName('sm'); 
 
    var valArr = Array.prototype.map.call(marks, function(el) { 
 
    return parseInt(el.value) 
 
    }); 
 
    // Sort value array in descending order 
 
    var marks = valArr.sort(function(a, b) { 
 
    return b - a 
 
    }); 
 
</script> 
 
<table id="tableID" width="200" border="1"> 
 
    <tr> 
 
    <td width="122" class=""> 
 
     <input name="name" class="sm" id="sm" type="text" value="4" /> 
 
    </td> 
 
    <td width="62" class="pos"></td> 
 
    </tr> 
 

 
    <tr> 
 
    <td class=""> 
 
     <input name="name" class="sm" id="sm1" type="text" value="6" /> 
 
    </td> 
 
    <td class="pos1"></td> 
 
    </tr> 
 

 
    <tr> 
 
    <td class=""> 
 
     <input name="name" class="sm" id="sm2" type="text" value="10" /> 
 
    </td> 
 
    <td class="pos2"> 
 
     <script type="text/javascript"> 
 
     var marksID = document.getElementById('sm2').value; 
 
     var mark = parseInt(marksID); 
 

 
     var valPos = marks.indexOf(mark); 
 
     document.getElementsByClassName('pos2')[0].textContent = valPos; 
 
     </script> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td class=""> 
 
     <input name="name" class="sm" id="sm3" type="text" value="45" /> 
 
    </td> 
 
    <td class="pos3"></td> 
 
    </tr> 
 
    <tr> 
 
    <td class=""> 
 
     <input name="name" class="sm" id="sm4" type="text" value="1" /> 
 
    </td> 
 
    <td class="pos4"></td> 
 
    </tr> 
 
</table>

+0

Ihr erstes Skript alle Elemente mit 'document.getElementsByClassName ('sm') finden nicht sehr zu schätzen wissen', weil das Skript vor der Analyse der Tabelle ausgeführt wird. Sie müssen die '

0

I .using DOMContentLoaded von Steven P auf einer der Kommentare wie vorgeschlagen herausgefunden. Hier ist die Demo von dem, was ich gemacht habe. Eine gute Möglichkeit, die Position von Zahlen in einer Liste nach dem Sortieren von der höchsten zur niedrigsten zu sagen.

<table id="tableID" width="200" border="1"> 
 
    <tr> 
 
    <td width="122" class=""> <input name="name" class="sm" id="sm" type="text" value="4" /> </td> 
 
    <td width="62" class="pos"></td> 
 
    </tr> 
 
    
 
    <tr> 
 
    <td class=""> <input name="name" class="sm" id="sm1" type="text" value="6" /> </td> 
 
    <td class="pos1"> </td> 
 
    </tr> 
 
    
 
    <tr> 
 
    <td class=""> <input name="name" class="sm" id="sm2" type="text" value="10" /> </td> 
 
    <td class="pos2"> 
 

 
</td> 
 
    </tr> 
 
    <tr> 
 
     <td class=""> <input name="name" class="sm" id="sm3" type="text" value="6" /> </td> 
 
     <td class="pos3"> 
 
<script type="text/javascript"> 
 

 

 
document.addEventListener("DOMContentLoaded", function(event) { 
 
\t 
 
var marksID3 = document.getElementById('sm3').value; 
 
var mark3 = parseInt(marksID3); 
 
//alert (mark3) 
 

 
var valPos3 = marks.indexOf(mark3); 
 
var valPost3 = parseInt(valPos3 + 1); 
 

 
document.getElementsByClassName('pos3')[0].textContent = valPost3; 
 

 

 
}); 
 

 
</script></td> 
 
    </tr> 
 
    <tr> 
 
     <td class=""> <input name="name" class="sm" id="sm4" type="text" value="45" /> </td> 
 
     <td class="pos4"> 
 
<script type="text/javascript"> 
 

 
document.addEventListener("DOMContentLoaded", function(event) { 
 
var marksID4 = document.getElementById('sm4').value; 
 
var mark4 = parseInt(marksID4); 
 
//alert (mark4) 
 

 
var valPos4 = marks.indexOf(mark4); 
 
var valPost4 = parseInt(valPos4 + 1); 
 

 
document.getElementsByClassName('pos4')[0].textContent = valPost4; 
 
}); 
 
</script></td> 
 
    </tr> 
 
</table> 
 
<script type="text/javascript"> 
 
// Get the values as numbers 
 

 
var marks = document.getElementsByClassName('sm'); 
 
var valArr = Array.prototype.map.call(marks, function(el) { 
 
    return parseInt(el.value) 
 
}); 
 
// Sort value array in descending order 
 
var marks = valArr.sort(function(a, b) { 
 
    return b-a 
 
}); 
 

 

 
</script>

Wenn es irgendwelche andere gute Vorschläge oder Verbesserungen i wird