我遇到类似的问题,我的代码如下:
<!doctype html>
<html>
<title> this is a test page</title>
<meta charset="utf-8">
<head>
<script>
function test(){
var unorderedList = document.getElementById('list');
var noList = unorderedList.getElementsByTagName('li');
var number;
alert("this is a test : "+noList[0].value);
for( int i=0; i<noList.length; i++){
number = number + noList[i].value;}
console.log(number);};
window.onload=test;
</script>
</head>
<body>
<ul id="list">
<li> 2</li>
<li> 3</li>
</ul>
</body>
我无法总结'ul'中的数字,你能帮助我吗?
答案 0 :(得分:3)
您要找的不是value
innerHTML
。
所以,而不是说
number = number + noList[i].value
你应该说
number = number + noList[i].innerHTML
此外,在尝试对其进行整数加法之前,您需要确保该数字具有数值。而不是说
var number;
你应该说
var number = 0
编辑:根据你的评论,问题是innerHTML以字符串形式返回。
有四种方法可以解决这个问题。
方法1:
list_item = noList[i].innerHTML
if(list_item.charAt(0) == "0"){
number = number + parseInt(list_item, 10);
} else {
number = number + parseInt(list_item);
}
解释1:您将字符串读入list_item。然后检查字符串中的第一个字符以确定数字的基数。这是为了确保与旧浏览器的兼容性。从ECMAScript 5开始,parseInt默认为10,但是,较旧的实现通常使用base 8作为以0开头的字符串。
方法2:
list_item = +noList[i].innerHTML
number = number + list_item
解释2:每种类型都有一元运算符。对于整数,这是+
,因此将+
应用于任何内容都会尝试将其强制转换为整数,应用!!
会尝试将其强制转换为Boolean
等。
方法3:
list_item = Number(noList[i].innerHTML);
number = number + list_item
解释3:Number对象是一个构造函数对象,它试图解析一个数字并提供方便的方法。目前只有Firefox完全支持,但基本解析可以在其他浏览器中使用。
方法4:
list_item = noList[1].innerHTML*1
number = number+list_item
解释4:Javascript使用Duck Typing(如果它像鸭子一样走路,像鸭子一样嘎嘎就必须是鸭子),所以如果一个项目响应* 1,它必须是一个数字。还有为浮点数工作的额外好处。
我推荐哪一个?
我可能暂时远离Number构造函数,因为它并不是真正广为人知/支持。一般来说,我实际上会推荐parseInt
,因为它是最广为人知的方法,并且大多数开发人员都会清楚地了解代码正在做什么。
值得注意的是,在Chrome和最近的Firefox中,parseInt
也是最快的,但是,在旧版本的Firefox中,Number构造函数提供了类似的性能优势(并且完全支持)。
反对parseInt()
的唯一真正有意义的论点是Opera,其中parseInt
将其他方法推理了近3倍。
答案 1 :(得分:0)
尝试:
<ul id="list">
<li value="2"> 2</li>
<li value="3"> 3</li>
</ul>