• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptに関する質問です。)

なぜあまりが0になるとJSが動作するのか?

このQ&Aのポイント
  • このコードはJavaScriptで、HTMLの要素の背景色を交互に変えるものです。
  • あまりが0になるとは、iの値が偶数であることを意味します。
  • このコードでは、ul要素の子要素のうち、奇数番目のli要素の背景色をグレーに変えています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> document.querySelector("#wrap .list"). > ここまでは理解できるのですが、 querySelector は、1つのHTML要素を返す。 querySelectorAll は、複数のHTML要素をノードリストととして返す。(JSの配列と似ているがそうではない) querySelector で返されたノード(ul要素)には、子ノード(今回はli要素)が10個存在する。 querySelector で得られた要素に .childNodes (.children) を付加することで、その”子ノードリスト”を得られる。 その得られた子ノード群にまとめて背景色を設定できる命令はない(*1)ので、1個づつ 変数 child に代入して色をつける。 *1:ブラウザが対応していれば、スタイルシートにルールを設定すればできる

kanako20123
質問者

お礼

皆さんありがとうございました。評価の方が遅くなってしまい申し訳ありませんでした。また是非教えてください。

kanako20123
質問者

補足

ありがとうございます。質問引っ張りすぎで申し訳ないのですが、 >>childNodes (.children) を付加することで・・・・・ ここを聞こうかと思ったのですが、書いているうちなんとなくわかりました。

その他の回答 (3)

回答No.3

if (評価) { ;} 評価は、0のときは false それ以外の数値は、true と判断される -- querySelector が使えるなら、querySelectorAll も使えるはず。 その提示されたサンプルでは、<ul>要素の子要素を全部選び、奇数のものに背景色を付けている なので、<li>要素の前後にテキストノードがあると判断するブラウザが有れば、正常に動かないかも? なので、以下のようにする。(<li>要素の奇数番目を収集) ループの中に無駄な条件分岐の命令など不用になる var children = document.querySelectorAll("#wrap .list li:nth-of-type(even)"); for(var child, i = 0; child = children[i++];) {  child.style.backgroundColor = "#EEEEEE"; } もしくは、 Array.prototype.forEach.call (  document.querySelectorAll("#wrap .list li:nth-of-type(even)"), function (e) {   e.style.backgroundColor = "#EEEEEE"; }); というか、スクリプトを使うまでもなくスタイルシートで…

kanako20123
質問者

補足

みなさんありがとうございます。 document.querySelector("#wrap .list"). ここまでは理解できるのですが、 この後、childrenとしてvar childとするのはなぜですか。 変数の宣言の仕方とか、なぜ宣言するのかとか、基本的なところがよくわかりません。 初心者です!すみません。よろしくお願いします。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

簡単にいうと、1行おきに行の色を変える、ということですね。 i%2 で i を 2 で割った余りを求めていますが、2で割った余りは0か1しかなく、i が1ずつ増加するので0と1が交互に発生することになります。 このあまりが1の時だけ(iが奇数の時) child.style.backgroundColor = "#EEEEEE"; が実行される(=動作する?)ということです。

回答No.1

>なぜあまりが0になると、JSが動作するのかがわかりません。 確認させてください。 どういう状態になったら「動作している」と判断され、 どういう状態になったら「動作していない」と判断されたのですか?

関連するQ&A