-2

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

<!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”中的数字,您能帮帮我吗?

4

2 回答 2

3

你要找的value不是innerHTML.

所以,与其说

number = number + noList[i].value

你应该说

number = number + noList[i].innerHTML

此外,在尝试对其进行整数加法之前,您需要确保该数字具有数值。所以与其说

var number;

你应该说

var number = 0

编辑:根据您的评论,问题是 innerHTML 作为字符串返回。

有四种方法可以解决这个问题。

方法一:

 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 为基数,但是,旧的实现通常使用以 8 为基数的以 0 开头的字符串。

方法二:

 list_item = +noList[i].innerHTML
 number = number + list_item

解释 2:每种类型都有一个一元运算符。对于整数,这是+,因此应用于+任何事物都会尝试将其转换为整数,应用!!将尝试将其转换为 aBoolean等。

方法三:

 list_item = Number(noList[i].innerHTML);
 number = number + list_item

解释 3: Number 对象是一个构造函数对象,它试图解析一个数字并提供方便的方法。目前仅在 Firefox 中完全支持,但基本解析将在其他浏览器中工作。

方法四:

 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 倍。

于 2013-02-25T07:52:57.627 回答
0

尝试:

<ul id="list">
  <li value="2"> 2</li>
  <li value="3"> 3</li>
</ul>   
于 2013-02-25T07:56:15.200 回答