为什么我的脚本没有在无序列表中添加整数?

时间:2013-02-25 07:46:16

标签: javascript

我遇到类似的问题,我的代码如下:

<!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'中的数字,你能帮助我吗?

2 个答案:

答案 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构造函数提供了类似的性能优势(并且完全支持)。

然而,IE通常很慢,但最快的是一元运算符和乘法(尽管不是很多)。

反对parseInt()的唯一真正有意义的论点是Opera,其中parseInt将其他方法推理了近3倍。

答案 1 :(得分:0)

尝试:

<ul id="list">
  <li value="2"> 2</li>
  <li value="3"> 3</li>
</ul>