从表中已排序的数字列表中查找数字的位置

Find the position of a number from a list of sorted numbers in a table

本文关键字:数字 位置 列表 查找 排序      更新时间:2023-09-26

我试图从表中的输入值列表中找到输入值的位置,然后显示该位置。这是在对值从最高值到最低值进行排序之后。

在下面的例子中,我期望值为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>

必须在加载页面后调用javascript。

把代码放在你身体元素的末尾:

</body>
<script type="text/javascript">
(function() {
    var marksID = document.getElementById('sm2').value;
    var mark = parseInt(marksID);
    var valPos = marks.indexOf(mark);
    document.getElementsByClassName('pos2')[0].textContent = valPos;
})();
</script>

我明白了。按照Steven p对其中一条评论的建议,使用DOMContentLoaded。这是我制作的演示。从最高到最低排序后,表示列表中数字位置的好方法。

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

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