-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

あなたが探しているのは、それではありませvalueinnerHTML

だから、言うよりも

number = number + noList[i].value

あなたは言うべきです

number = number + noList[i].innerHTML

さらに、数値に整数の加算を行う前に、数値が数値であることを確認する必要があります。だから言うよりも

var number;

言うべき

var number = 0

編集:あなたのコメントによると、問題は innerHTML が文字列として返されることです。

これに対処する方法は 4 つあります。

方法 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 進数ですが、古い実装では、0 で始まる文字列に 8 進数を使用することがよくありました。

方法 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 でなければなりません。浮動小数点数でも機能するという追加の利点があります。


どちらをお勧めしますか?

Number コンストラクターはあまり広く知られていない/サポートされていないため、当分の間、このコンストラクターには近づかないでしょう。これはparseInt最も広く知られている方法であり、ほとんどの開発者はコードが何をしているかを頭の中で知っているためです。

Chrome と最近parseIntの Firefox では、はるかに高速ですが、古いバージョンの Firefox では Number コンストラクターが同様のパフォーマンス上の利点を提供します (完全にサポートされています)。

ただし、IE は一般的に遅いですが、最も速いのは単項演算子と乗算です (それほどではありませんが)。

反対する唯一の本当に重要な議論parseInt()は Opera であり、OperaparseIntは他の方法よりもほぼ 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 に答える