querySelectorAllの書き方についての疑問

このQ&Aのポイント
  • javascript初心者の方がquerySelectorAllの書き方について困っています。document.querySelector('target')のような書き方を多く見かけますが、たまに後ろに[]が付いている書き方があります。これはどのような意味なのでしょうか?
  • また、htmlの部分で更新日を表示するために<p>タグ内に<time>タグがあり、js部分ではdocument.querySelectorAll('time')[0]となっています。これは何を意味しているのでしょうか?
  • さらに、htmlの部分で広告のイメージを表示するために<aside>タグ内に<div>タグがあり、js部分ではdocument.querySelectorAll('aside div')[0]となっています。これは具体的に何をしているのでしょうか?
回答を見る
  • ベストアンサー

querySelectorAll

javascript初心者です。 querySelectorAllの書き方に付いて困っています。 document.querySelector('target') のような書き方を多く見ますが、 たまに以下のように、後ろに [] が付いている 書き方があります。 これは例えば以下のような書き方の場合は どのような意味になっているのでしょうか? html の部分 <p>更新日:<time datetime="2015-02-15">2015年2月15日</time></p> js の部分 var dtObj = new Date(); var y = dtObj.getFullYear(); var m = dtObj.getMonth()+1; var d = dtObj.getDate(); document.querySelectorAll("time")[0].innerHTML = y+"/"+m+"/"+d; また以下の場合のお願い致します。 html の部分 <aside> <div><img src="images/banner.png" width="200" height="200" alt="広告"></div> </aside> js部分 var bannerImage = new Image(); bannerImage.src = "images/banner3.png"; bannerImage.onload = function(){ var aDiv = document.querySelectorAll("aside div")[0]; // ●●E aDiv.appendChild(bannerImage); 抜粋にてわかりづらいかもしれませんが何卒よろしくお願い致します。

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

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.1

querySelector はセレクター文字列で一致する最初の要素にマッチしますが、querySelectorAll はセレクター文字列にマッチします。 querySelectorAll はマッチした全ての要素を NodeList として返します。 NodeList は配列のようなオブジェクトとなり、配列のように添え字を付けることで要素ノードを取得できます。 var aDiv = document.querySelectorAll("aside div")[0]; // "aside div" に一致する NodeList の初めの要素を返す。document.querySelector("aside div") と同じ返り値。 http://www.w3.org/TR/selectors-api/#queryselectorall https://developer.mozilla.org/ja/docs/DOM/Document.querySelector https://developer.mozilla.org/ja/docs/DOM/Document.querySelectorAll

naonao321
質問者

お礼

配列になるから括弧が必然だったのですね。ありがとうございました。

その他の回答 (1)

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

#1 です。下記の通り、訂正します。 × querySelector はセレクター文字列で一致する最初の要素にマッチしますが、querySelectorAll はセレクター文字列にマッチします。 ○ querySelector はセレクター文字列で一致する最初の要素にマッチしますが、querySelectorAll はセレクター文字列に一致する全ての要素にマッチします。 ついでに補足しておくと、NodeList は document.querySelectorAll("aside div").item(0) のように書くこともでき、一応こちらが正式な書き方となります。 # 配列ライクな書き方のほうが速いし短いので、ほとんどの方はこの書き方を採用しませんが…。

naonao321
質問者

お礼

なるほどよくわかりました。ありがとうございます。

関連するQ&A

  • NETSCAPEで表示がうまくいかない

    折りたたみメニューのようなのを作成してます。 IEだと問題なく動くのですが、 NETSCAPEになると、マウスオーバー・オフで ロールオーバーの画像が変わらなかったり 表示が消えるはずの箇所が残ったりします。 NETSCAPEでも、ちゃんと動く用にしたいです。 どなたかご助言を頂けないでしょうか? ソースの中を抜粋しました <A href ="BOOK.html" onMouseOver="On('img10');" onMouseOut="Off('img10');"> <IMG src ="10-1.png" border="0" NAME = "img10" alt = ""> </A></DIV> <DIV class="Lmenu_Rmenu"> <A href ="CD.html" onMouseOver="On('img11');" onMouseOut="Off('img11');"> <IMG src ="11-1.png" border="0" NAME = "img11" alt = ""> </A></DIV> <DIV class="Lmenu_Rmenu"> <A href ="DVD.html" onMouseOver="On('img12');" onMouseOut="Off('img12');"> <IMG src ="12-1.png" border="0" NAME = "img12" alt = ""> </A></DIV> </DIV></div> <SCRIPT type="text/javascript" src="java.js"></SCRIPT> var img1on = new Image(); var img1off = new Image();  ・  ・ var img12on = new Image(); var img12off = new Image(); img1off.src = "1-1.png"; // 普段の画像 img1on.src = "1-2.png"; // ポイント時の画像  ・  ・ img12off.src = "12-1.png"; img12on.src = "12-2.png"; // ポイント時の処理 function On(name) { if (document.images) { document.images[name].src = eval(name + 'on.src'); } } // 放した時の処理 function Off(name) { if (document.images) { document.images[name].src = eval(name + 'off.src'); } }

  • マウスを当てると、サイコロの背景色を変化するように

    したいです。 function senntaku(IMG){document.image1.src=IMG} document.write('<img onMouseOver="senntaku('MAPsenntaku.png');" class="simap" name="image1" src="img/MAP.png"/><img onclick="masusaikoro();" src="sai1.png" class="saikoro" name="saikoro">'); 上記のソースでサイコロの背景の画像がマウスに当たるとMAP.pngからMAPsenntaku.pngに変わるように作ったつもりですが、全然変わらない所か、サイコロ自体見えなくなりました。 どう修正したら、変える事ができるのか、教えてください。 <html> <head> <link rel="stylesheet" href="daisu.css" type="text/css"/> <script src="daisu.js"></script> <title>ダイス戦略</title> </head> <body> <div id="title"> <p>あああ</p> <p><button id="btn_gamennkirikae" type="button">ああああ</button></p> </div> <div id="gamegamenn"> <p><button id="btn_hitori" type="button">あああああ</button></p> </div> <div id="map"> <ul id="sima"> <script type="text/javascript"> /*サイコロ*/function saikoro(){ var sai=new Array("sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png"); var imgs = document.querySelectorAll('.saikoro'); for (var i = 0; i < imgs.length; i ++) { var r = Math.floor(Math.random()*sai.length); imgs[i].setAttribute('src', sai[r]); } } function masusaikoro(){ var sai=new Array("sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png"); var imgs = document.querySelectorAll('.saikoro'); for (var i = 0; i < imgs.length; i ++) { var r = Math.floor(Math.random()*sai.length); imgs[i].setAttribute('src', sai[r]); } } function senntaku(IMG){document.image1.src=IMG} ****ここと***** document.write('<li>'); document.write('<img onMouseOver="senntaku('MAPsenntaku.png');" class="simap" name="image1" src="img/MAP.png"/><img onclick="masusaikoro();" src="sai1.png" class="saikoro" name="saikoro">');      ***ここ**** document.write('</li>'); </script> </ul> <div id="hyouzi"> </div> </div> <body> </html>

  • 全部のサイコロをjavascriptで動かしたい。

    たくさんのサイコロを画面が切り替わったと同時に出てきて、サイコロが全部ランダムに違う数字になって出てくるようにしたいのですが、HTML文の <li><img class="simap" src="img/MAP.png"/><img src="sai1.png" class="saikoro" name="saikoro"></li>の行が1個だったら、画面が切り替わるとちゃんとランダムに数字が変わるうようになり、何も問題ないのですが、 この行が2行以上になると、ランダムになるはずなのに、なぜかなりません。 毎回サイコロの目は1です。 どうしてランダム機能がちゃんと機能しないのか、 どう修正すればいいのか、 アドバイスお願いします。 *****************HTML文********************* <html> <head> <link rel="stylesheet" href="daisu.css" type="text/css"/> <script src="daisu.js"></script> <title>ダイス戦略</title> </head> <body> <div id="title"> <p>ああああ</p> <p><button id="btn_gamennkirikae" type="button">あああ</button></p> </div> <div id="gamegamenn"> <p><button id="btn_hitori" type="button">ああああ</button></p> </div> <div id="map"> <ul id="sima"> <li><img class="simap" src="img/MAP.png"/><img src="sai1.png" class="saikoro" name="saikoro"></li> **********ここ*********************************** </ul> </div> <body> </html> ******************CSS文******************** #title{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } #gamegamenn{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } button#btn_gamennkirikae{ width: 150px; height: 50px; margin-top:300px; } #map{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } #map li{ float:left; list-style-type: none; margin-left:-50px; } #map img{ } #sima{ float:left; margin-left:50px; } .saikoro{ width:50px; height:50px; position:relative; right:80px; bottom:25px; } .simap{ } *****************JS文********************* window.addEventListener('load',initGame,false); function initGame(){ var dialog = document.querySelector('#title'); dialog.style.display='block'; var dialog =document.querySelector('#gamegamenn'); dialog.style.display='none'; var dialog =document.querySelector('#map'); dialog.style.display='none'; var btn =document.querySelector('#btn_gamennkirikae'); btn.addEventListener('click',gamegamenn,false); } function gamegamenn(){ var dialog = document.querySelector('#title'); dialog.style.display='none'; var dialog =document.querySelector('#gamegamenn'); dialog.style.display='block'; gamestart(); } function gamestart(){ var btn =document.querySelector('#btn_hitori'); btn.addEventListener('click',hitori,false); } function hitori(){ var dialog =document.querySelector('#gamegamenn'); dialog.style.display='none'; var dialog =document.querySelector('#map'); dialog.style.display='block'; chg(); } function chg(){ sai=new Array("sai0.png","sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png"); r=Math.random()*6; //乱数表 rr=Math.floor(r)+1;   //切り捨てて+1する document.saikoro.src=sai[rr]; //サイコロを入れ替える }

  • JavaScriptロールオーバーで画像が変わりません

    <SCRIPT TYPE="text/javascript"> <!-- if (document.images) { var imgtopon = new Image(); imgtopon.src = "images/menu/topon.jpg"; // ポイント時の画像 var imgtopoff = new Image(); imgtopoff.src = "images/menu/topoff.jpg"; // 通常の画像 } // ポイント時の処理 function On(name) { if (document.images) { document.images[name].src = eval(name + 'on.src'); } } // 放した時の処理 function Off(name) { if (document.images) { document.images[name].src = eval(name + 'off.src'); } } // --> </SCRIPT> </head> <body> <div id="headwrapper"> </div> <div id="wrapper"> <div id="header"> <h1>~</h1> </div> <div id="pagebody"> <A HREF="~" onMouseOver="On('imgtop')" onMouseOut="Off('imgtop')"><IMG SRC="images/menu/topoff.jpg" ALT="sample1" BORDER="0" WIDTH="102" HEIGHT="54" NAME="imgtop"></A> ↑↑↑終了 ポイントしていないときの画像は表示されますが、ロールオーバーしてもそのままの状態です。 宜しくお願いします。

  • 同HTML内で複数のJavaScriptを設置

    ●JavaScriptを使用して、再生時間の異なったスライドショーを同時再生したい (js1とjs2の画像を重ねて、アナログ時計が動くようなスライドショーにしたい) ●現状:どちらか一方の画像しか動かない(ソースの後に記述したjsのみ動く) 調べたところによると、jQueryを使用すれば可能との事で色々なサイトで調べ、 試行錯誤したのですがうまく動きません。 (参考にさせて頂いたサイト様:http://black-flag.net/jquery/20110525-3120.html) jQueryを使用しなければ、同時再生はできないのでしょうか? そうなると、以下のHTML、CSSなどを根本から変える必要があるように思っています。 ※実際に上記のサイトを参考に行ってはみたのですが・・・力不足で解決できませんでした。 初歩的な質問かとは思いますが、ご指摘頂ければと思います。 よろしくお願い致します。 _____________   XHTML    ____________________ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ポートフォリオ</title> <link href="base.css" rel="stylesheet" type="text/css" media="all" /> <link href="top.css" rel="stylesheet" type="text/css" media="all" /> <script type="text/javascript" src="portfolio.js"></script> <script type="text/javascript" src="portfolio2.js"></script> <noscript> JavaScript対応ブラウザで表示してください。 </noscript> </head> <body onload="setTimeout('timerImg()', 3000);"> <body> <div id="header"> <img src="portfolio/logo2.png" alt="ヘッダー"></div> <div id="wrapper"> <div id="photo1"> <img name="img/1.png" src="img/1.png" alt="長針"></div> <div id="photo4"> <img name="img2/1.png" src="img2/1.png" alt="短針"></div> <div id="photo2"> <img src="portfolio/tokei.under.png" alt="時計柄"></div> <div id="photo3"> <img src="portfolio/tokei.logo.png" alt="ロゴ"></div> <ul id="contens-nav">  <li id="home"><a href="portfolio.html">HOME"</a></li> </ul> <ul id="contens-nav2">  <li id="works"><a href="works.html">WORKS"</a></li> </ul> <ul id="contens-nav3">  <li id="about"><a href="about.html">ABOUT"</a></li> </ul> <ul id="contens-nav4">  <li id="contact"><a href="contact.html">CONTACT"</a></li> </ul> </div> </body> </html> _____________   CSS(base)   ___________________ @charset "UTF-8"; * { margin:0; } body { font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; line-height: 1.5; } div#wrapper { position:relative; width: 844px; left: 50%; margin-left: -422px; } div#photo1 { position: absolute; left: 50%; height: 100%; width: 844px; margin-left: -422px; z-index: 3; } div#photo4 { position: absolute; left: 50%; height: 100%; width: 844px; margin-left: -422px; z-index: 2; } div#photo2{ position: absolute; left: 50%; height: 100%; width: 844px; margin-left: -422px; z-index: 1; } div#photo3{ position: absolute; left: 50%; height: 100%; width: 844px; margin-left: -422px; z-index: 4; } _____________   js 1   ____________________ // JavaScript Document <!-- var photo = new Array("img2/1.png", "img2/2.png", "img2/3.png","img2/4.png", "img2/5.png", "img2/6.png","img2/7.png", "img2/8.png", "img2/9.png","img2/10.png", "img2/11.png", "img2/12.png"); var i = 0; function timerImg () { if(document.images['img2/1.png'].complete) { i++; if(i >= photo.length) i = 0; document.images['img2/1.png'].src = photo[i]; } setTimeout("timerImg()", 12000); } //--> _____________   js 2   ____________________ // JavaScript Document <!-- var photo = new Array("img/1.png", "img/2.png", "img/3.png","img/4.png", "img/5.png", "img/6.png","img/7.png", "img/8.png", "img/9.png","img/10.png", "img/11.png", "img/12.png"); var i = 0; function timerImg () { if(document.images['img/1.png'].complete) { i++; if(i >= photo.length) i = 0; document.images['img/1.png'].src = photo[i]; } setTimeout("timerImg()", 1000); } //-->

  • javaでロールオーバー設定で教えてください

    外部ファイルで同じ設定でロールオーバーを設定しているのですが ポイントを合わせると画像が動く(ボタンでよくある下にへこむような動作)ものと動かないものが出てきます。 ロールオーバー自体はできているのですがその動きの違いは何なのでしょうか? できれば全て動くようにしたいのですが… <外部ファイル> if (document.images) { var img1on = new Image(); img1on.src = "img/c2.png"; var img1off = new Image(); img1off.src = "img/c1.png"; } function On(name) { if (document.images) { document.images[name].src = eval(name + 'on.src'); } } function Off(name) { if (document.images) { document.images[name].src = eval(name + 'off.src'); } } <html> <p> <a href="home.html" onMouseOver="On('img1')" onMouseOut="Off('img1')"><img src="img/c1.png" alt="ホームへ" name="img1" border="0"></a> </p> これ以上のことはしていません。(全て統一でこのタグの 画像の名前やリンク先しかいじっていません。) 今貼り付けたものはへこむ動作はせずにロールオーバーのみが可能なものです。 誰か教えていただけませんでしょうか? またへこむような動作はどこで設定されているのでしょうか? 色々調べてはいるのですが初心者なもので分かりません… 宜しくお願い致します。

  • ロールオーバーで画像を先読みする方法

    スワップイメージをJavascriptで製作しました。 どうしても 先読みした画像を 指定する方法がわかりません。 このやり方ではできないのでしょうか? お教えください よろしくお願いします。 以下作成したコードになります。 function preload() { var images1 = new Image(); var images2 = new Image(); var images3 = new Image(); images1.src = "ike1.jpg"; images2.src = "ike2.jpg"; images3.src = "ike3.jpg"; } function over(num){ var a=document.getElementById("img1"); var b=document.getElementById("title1"); var c=document.getElementById("teima1"); switch(num){ case 1: a.innerHTML = "<img src='ike1.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; switch(num){ case 2: a.innerHTML = "<img src='ike2.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; switch(num){ case 3: a.innerHTML = "<img src='ike3.jpg'>"; b.innerHTML = "ああああ"; c.innerHTML = "ああああ"; break; } }

  • FirefoxでonMouseOver/Outの動作がされません。。。

    全くの初心者で恐縮ですが、どうしても判らなかったので投稿させていただきます。 onMouseOver/Outで画像を変化させるごく一般的なスクリプトを使用したいのですが、外部jsファイルから読み込ませるとどうしてもFirefoxで動作されません。 IEでは動くようですが、IEの場合間違った記述でも動作してしまう事がある、との事…。 また、外部jsファイルに置かずhtmlの中にスクリプトを記載した場合はFirefoxでも問題なく動きました。 エラーコンソールで確認すると「syntax error」となっており、記述に間違いがあるのは確かなようなのですが、検索にかけてもそれらしいものにはヒットしませんでした。 以下、作成しているファイルからコピペです。 ◆jsファイル if (document.images) { var img1on = new Image(); img1on.src = "img/1on.jpg"; var img1off = new Image(); img1off.src = "img/1off.jpg"; } function On(name) { if (document.images) { document.images[name].src = eval(name + 'on.src'); } } function Off(name) { if (document.images) { document.images[name].src = eval(name + 'off.src'); } } ◆htmlファイル ・<head>内に<script type="text/javascript" src="script.js"></script>を記載。 ・<body>内の該当リンク部分に下記の記載。 <a href="index.html" onMouseOver="On('img1')" onMouseOut="Off('img1')"><img src="img/1off.jpg" id="img1" /></a> 尚、スクリプトの内容はほぼこちら↓のサイト様の丸写し状態です。 http://www.tagindex.com/javascript/link/change1.html jsファイルのパスに間違いが無いか等、自分で考えられる事は全て確認してみたのですがどうしても判らず、どなたか詳しい方のお知恵を拝借出来ればと思います。 よろしくお願いいたします。

  • 折たたみメニューの表示・非表示

    JavaScriptで下記のような折りたたみ(階層)メニューを作成しています。 <script type="text/javascript"> <!-- /* ブラウザ判別 */ var ie=document.all ? 1 : 0; var ns6=document.getElementById&&!document.all ? 1 : 0; var opera=window.opera ? 1 : 0; /* 子メニューの表示・非表示切替 */ function openFolder(childObj, parentObj){ var child=""; var parent=""; var sw="../../images/blanc.gif"; /* フォルダ表示時のアイコン画像 */ var hd="../../images/blanc.gif"; /* フォルダ非表示時のアイコン画像 */ if(ie || ns6 || opera){ child=ns6 ? document.getElementById(childObj).style : document.all(childObj).style; parent=ns6 ? document.getElementById(parentObj) : document.all(parentObj); if (child.display=="none"){ child.display="block"; parent.src=sw; }else{ child.display="none"; parent.src=hd; } } } //--> </script> <div id="open_1" style="display:none;"> <a href="01.html"><img src="images/list_01.gif"></a><br> <a href="02.html"><img src="images/list_02.gif"></a><br> </div> <div id="open_2" style="display:none;"> <a href="03.html"><img src="images/list_03.gif"></a><br> <a href="04.html"><img src="images/list_04.gif"></a><br> </div> <div id="open_3" style="display:none;"> <a href="04.html"><img src="images/list_03.gif"></a><br> <a href="05.html"><img src="images/list_04.gif"></a><br> </div> ここで、<div id="open_1">内のリンクをクリックして01.htmlに遷移した際、01.htmlでも<div id="open_1">内の階層が表示されているようにしたいのです(下のふたつの階層についても同じです)。 過去ログなどを調べまして、 <script type="text/javascript"><!-- function keepOpen(){ document.getElementById('x').style.display = "block"; document.getElementById('y').style.display = "block"; }keepOpen(); //--></script> を挿入すればいけそうでやってみたのですが、今度は開きっぱなしになってしまいます。二日ほど調べたのですが、よい解決策が見つかりません(また、<div>の中のソースはすでにphpのコードを組込んでいるので、できれば中の部分はいじりたくありません)。 お詳しい方、大変恐れ入りますが、どうぞご教示くださいませ。 よろしくお願いいたします。

  • mapでロールオーバー

    以下のようにmapでロールオーバーをしようとしたのですが、機能しません。 <div align="center"><img src="images/main.png" alt="" usemap="#map1" border="0" /></div> <map name="map1"> <area href="taku.html" alt="" shape="rect" coords="766,0,996,69" onmouseover="this.src='images/mainleft1_on.png'" onmouseout="this.src='images/mainleft1.png'" src="images/mainleft1.png" alt="" border="0" /> <area href="taku2.html" alt="" shape="rect" coords="766,70,996,137" onmouseover="this.src='images/mainleft2_on.png'" onmouseout="this.src='images/mainleft2.png'" src="images/mainleft2.png" alt="" border="0"/></map> 全体の画像main.png の上にボタンmainleft1.png mainleft2.png がロールオーバーするようにしたいんですができないんでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう