下記のソースは、for in 文で右辺値のオブジェクトのプロパティ名を左辺値に代入し、<li>
のボーダー、パディングを合わせた幅を取得しているところです。
html
1<ulclass="cf"> 2<li>1</li><!-- 300px--> 3<li>2</li> 4<li>3</li> 5</ul>
javascript
1var slider_li = Array.prototype.slice.call(document.getElementsByTagName("li")); 2console.log("li",document.getElementsByTagName("li")); 3 4 5 6for(var li in slider_li) {//slider_li内のプロパティ名を代入している。 7 8 if(typeof(count) === "undefined") { 9 var count= 0; 10 } else if(count == 0) { 11 count += 1; 12 } else { 13 count += 1; 14 } 15 16 //スライダー(li)の大きさを取得。offsetWidthは、ボーダーとパディングを含んでいる。 17 var slider_li_size = slider_li[count].offsetWidth; 18 19 console.log("★count回数",count,"★大きさ",slider_li_size,"px★プロパティ名",li[count],"★slider_li",slider_li); 20} 21//★count回数 0 ★大きさ 300 px★プロパティ名 0 ★slider_li [object HTMLLIElement],[object HTMLLIElement],[object HTMLLIElement] 22//★count回数 1 ★大きさ 300 px★プロパティ名 undefined ★slider_li [object HTMLLIElement],[object HTMLLIElement],[object HTMLLIElement] 23//★count回数 2 ★大きさ 300 px★プロパティ名 undefined ★slider_li [object HTMLLIElement],[object HTMLLIElement],[object HTMLLIElement] 24
ここで質問です。プロパティ名li[count]
の部分が、count回数0回目のときは0なのですが、それ以降だとundefinedと表示されてしまいます。
変数liは、配列slider_liが持っているプロパティ名を代入しています。想定では、0、undefined、undefinedではなく0、1、2となっているはずでした。
document.getElementsByTagName("li")
をコンソール画面で確認してみても 0 [object HTMLLIElement] {...}、 1 [object HTMLLIElement] {...}、 2 [object HTMLLIElement] {...}
となっており、ちゃんと連続する数字のプロパティ名に要素が入っていることが分かります。
なぜ、liは、0、1、2ではなく0、undefined、undefinedとなってしまうのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。