2016-07-29 72 views
0

我想從表中輸入值列表中找到輸入值的位置,然後顯示位置。這是在將值從最高值排序到最低值之後。從表中排序數字列表中查找數字的位置

在下面的例子中,我期望值爲10的輸入是位置2.同樣,如果我用值爲45的輸入測試它,位置將是1,依此類推。

我曾嘗試下面的代碼,但我得到一個位置-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

你的第一個腳本將找不到'document.getElementsByClassName( 'SM')'的任何元素,因爲腳本在表格解析之前運行。您需要在他們嘗試訪問的任何元素之後放置'

0

我想通了。採用DOMContentLoaded作爲一個評論建議的Steven P。這是我做的演示。在從最高排序到最低排序之後說出數字在列表中的位置的好方法。

<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>

如果有任何其他好的建議或改進,我會高度讚賞