【问题标题】:Need to convert result of .innerHTML to number on javascript需要将 .innerHTML 的结果转换为 javascript 上的数字
【发布时间】:2013-01-31 01:56:58
【问题描述】:

我有一个包含如下示例的表格的 html

<td class="topiccell">
    <span class="topicnormal">
        <a class="value" href="/topic/?lang=en&action=viewtopic&topic=http%3A%2F%2Fwww.wandora.org%2Fsparql%2Fresultset%2Fliteral%2F40">
                 40
        </a>
    </span>
</td>
<td class="topiccell">
   <span class="topicnormal">
       <a class="value" href="/topic/?lang=en&action=viewtopic&topic=http%3A%2F%2Fwww.wandora.org%2Fsparql%2Fresultset%2Fliteral%2F40">
                 3
        </a>
   </span>
</td>

我需要使用.innerHTML 解析 40、3 和另外 75 个数字。然后我想对所有 75 个数字求和。我使用了以下

var valuelements = document.getElementsByClassName("value");
var features = new Array(valuelements.length);
for (var i=0; i<=features.length; i++){ 
  var val = valuelements[i].innerHTML;
  var counter = counter + val;
}
document.write(counter); 

结果就像 40 3 等等......尝试了parseIntparseFloat.value 但结果总是NaN. 有什么建议吗?

【问题讨论】:

  • 你可以试试: var val = Number(valueelements[i].innerHTML);或 var val = parseInt(valueelements[i].innerHTML);并在循环外声明你的 var 计数器
  • 1*s 是你的朋友。如果 s 是数字的字符串表示形式,则 1*s 是数字。此外 javascript 没有块范围变量,因此请在 for 块之外声明所有变量。

标签: javascript parsing


【解决方案1】:

您需要使用起始编号初始化 counter,否则您将在 undefined 上执行数学运算。

var counter = 0;

然后在循环中,对.innerHTML 值使用parseIntparseFloat 或直接数字转换。

var counter = 0;

for (var i=0; i<features.length; i++){ 
  counter += parseFloat(valuelements[i].innerHTML);
}

在现代浏览器中,您可以这样做:

var count = [].reduce.call(valueelements, function(c, v) {
    return c + parseFloat(v.innerHTML);
}, 0);

【讨论】:

  • 谢谢大家的回答!好的,尝试了所有的答案,现在告诉我 "Error:valuelements[i] is undefined" 。我试图制作新的 Array(valueelements.length) 但一直说是未定义的......如何解决它?
  • @user2027553:我没有注意到你的&lt;= 循环中有&lt;=。它应该只是&lt;,如i&lt;features.length。我会更新的。
【解决方案2】:

尝试这样的事情,使用更实用的方法:

var sum = [].map.call(valuelements, function(v) {
  return +v.textContent; }).reduce(function(a, b) { return a + b; });

【讨论】:

  • 请注意...即使您将元素预先映射到数字,您仍应为.reduce 提供种子,以防万一找不到valuelements。如果没有种子,.reduce 在空数组上调用时会抛出错误。例如:[].map(Number).reduce(Number); // TypeError ... [].map(Number).reduce(Number, 0); // 0
  • 是的,我想这将是一个很好的做法。我假设 OP 元素。
猜你喜欢
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2017-12-07
  • 2013-06-07
  • 2021-03-31
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多