2016-07-29 29 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>

如果有任何其他好的建议或改进,我会高度赞赏

相关问题