JavaScript IDの複数読み込みについて

このQ&Aのポイント
  • JavaScriptのIDを複数読み込む方法について質問します。
  • 特定のIDを読み込んで変更したいのですが、方法が分かりません。
  • 試行錯誤したがうまくいかず、助言をいただきたいです。
回答を見る
  • ベストアンサー

JavaScript IDの複数読み込みについて

JavaScript(プログラミング)はほとんど知識のないもので、 自分なりに調べたのですが、分からないので質問させていただきます。 下記のようなJavaScriptがあります。 window.onload = function() { var target = document.getElementById("●●"); target.addEventListener("touchstart", function(){this.className="touchstyle";}, false); target.addEventListener("touchend", function(){this.className="notouchstyle";}, false); } "●●"のほかに"▲▲" "■■"というIDを読み込ませたいのですが、 それは可能でしょうか。 ("xxx"はclass指定に変更でも構いません) 色々と試してみたのですが、うまくいかず困っております。 何卒ご教授のほど宜しくお願い致します。

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

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

var target_1 = document.getElementById("●●"); var target_2 = document.getElementById("▲▲"); var target_3 = document.getElementById("■■"); これでいいのでは? >色々と試してみたのですが、うまくいかず困っております。 そのいろいろと試してみたという、実際のコード(うまくいかないコード)を提示してください。

ramentognes
質問者

お礼

ご回答ありがとうございます。 実際のコードは色々試しては消してと繰り返したので、残しておりません。。 でも教えて頂いたコードで対応できました。 ありがとうございました。

その他の回答 (2)

回答No.2

No1ですが、ついでにおまけです。 http://msdn.microsoft.com/en-us/library/windows/apps/hh465755.aspx は、IE用のマイクロソフト公式リファレンスサイトです。 DOMについてのリファレンスです。これは以外に役に立ちます。 http://msdn.microsoft.com/en-us/library/windows/apps/hh465823.aspx が getElementById メソッドのリファレンスです。DOM バージョン3 で記述されている事がわかります。そこのボタンを押すと、標準化されているW3Cサイトに飛びます。 http://www.w3.org/TR/DOM-Level-3-Core/ ここが、全ての原点です。 http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html 上記から、Coreのリンクをたどると http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-getElBId とすぐに見つかるはずです。 そこから、リンクをすべてみてください。そうすると、Element として規定されているIDとは、なんと規定されているかにたどり着きます。そう、そのメソッドの引数に指定できる値の型(どんな文字列か)が記載されています。 当然、HTMLの規定からはずれる事は、ほぼありません。 http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMString つまずいたら、まずリファレンスサイトを探し、書式を勉強しましょう。それから原本となる、標準書をみましょう。 そうすると、理解が深まります。そうすると、いかにブラウザ側でローカライズされているか分かります。

ramentognes
質問者

お礼

ご回答ありがとうございます。 教えて頂いたリンク先を見ましたが、 根本的に勉強しないとダメだと分かりました。

回答No.1

この辺は、いつもこのカテゴリーで、まっさきに答える方が、回答するかと思いきや、全然反応しないんですね。やっぱり、自己顕示欲を満たす質問でないとだめみたいですね。 本題です。 まず、HTMLとしてどうか? と言う問題があります。その辺を確認しましたでしょうか。 HTMLとしてどうかとは、HTML4.01 などと、規格され、標準化されている決まりごとです。 http://www.w3.org/TR/html401/ これになんと規定されていますか? http://www.w3.org/TR/html401/struct/global.html#h-7.5.2 http://www.w3.org/TR/html401/types.html#type-name そう、name属性と、同一に規定されています。 http://www.microsofttranslator.com/BV.aspx?ref=IE8Activity&a=http%3A%2F%2Fwww.w3.org%2FTR%2Fhtml401%2Fstruct%2Fglobal.html%23h-7.5.2 機械翻訳です。翻訳サイトもあるのでそちらも参考にしてください(機械翻訳と違い、ちゃんと意味通じるように約されています) 抜粋: ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). 英語1の私でも、なんとなくわかるような・・・ 最初はA~Z 及び a~zまでのアルファベットで始めないといけないみたいですね。最初のところで引っかかってしまったようですね。残念でした。 getElementById が あいまい検索だったらよかったのにね。 上記と同じようにJavaScript1.0 ~ 1.5 までのバージョンの標準書を見ましょう。 また、DOM 1 ~ 3 までの標準書を見ましょう。 それらになんと規定さてれいるかです。 ちなみにJavaScript はECMA ですので。それを、それぞれのブラウザ(エンジン)でローカライズしています。DOMも同じです。 http://www.ecma-international.org/publications/standards/Ecma-262.htm

関連するQ&A

  • javascript外部ファイル化の複数指定の質問です。

    javascript外部ファイル化の複数指定の質問です。 一つ目 ================================= try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} 二つ目 ================================= window.onload = function() { document.getElementById("home").onmouseover= function() {document.getElementById("sub_home").style.display="block"}; document.getElementById("home").onmouseout= function() {document.getElementById("sub_home").style.display="none"}; document.getElementById("sub_home").onmouseover= function() {document.getElementById("sub_home").style.display="block"}; document.getElementById("sub_home").onmouseout= function() {document.getElementById("sub_home").style.display="none"}; } この上記の2つのjavascriptを別々に外部ファイル化して、head内に読み込んでおります。 両方とも動作させたいのですが、下のwindow.onload のjavascriptしか動作しません。 両方、動作させるには、どのように記述すればよいのでしょうか? どなたか教えていただけませんか? よろしくお願い致しますm(_ _)m

  • class追加でロールオーバーするDOMのjavascript

    イベントハンドラをjs内に内包したロールオーバーを作成していて、 解決できない問題が発生しています。 リンクボタンをクリックして次のページに遷移したあと、 ブラウザの戻るボタンで戻るとonmouseover時の状態で戻ってしまいます。 原因はonunloadが動作がしていないためと思います。 onunloadをonclickにするとこの問題は回避はできますが、 クリックしたら必ず別ページに遷移しなければいけなくなります。 このスクリプトは必ずしもaタグでなくてもロールオーバーできるようにしたいのでうまい解決策ではありません。 何かよい解決方法はありますでしょうか。 // javascript start window.onload = function() { if(!document.getElementsByTagName) return false; var AddClass = document.getElementsByTagName("*"); for(var i=0;i<AddClass.length;i++){ if(AddClass[i].className.match("^(.+? )?addclass.+?( .+?)?$")){ if (document.all){ // IE AddClass[i].onmouseover = AddClassOn; AddClass[i].onmouseout = AddClassOff; AddClass[i].onunload = AddClassOn; }else{ AddClass[i].addEventListener("mouseover", AddClassOn, false); AddClass[i].addEventListener("mouseout", AddClassOff, false); AddClass[i].addEventListener("unload", AddClassOff, false); } } } function AddClassOn() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className; var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG + " " + class_name; id_Node.setAttributeNode(createAttr); } function AddClassOff() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className.replace(class_name,""); var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG; id_Node.setAttributeNode(createAttr); } } // javascript end /* style start */ .changeclass{ padding:4px; background:#ff0; border:1px solid #f00; } /* style end */ /* html start */ <body id="knowhow" class="body_test"> <ol> <li><a href="test.html"><img src="image/list01.gif" class="addclass_knowhow_changeclass" width="64" height="64" alt="ボタン" /></a></li> </ol> </body> /* html end */ ちなみに現状のスクリプトはidだけにclass追加するように作っていますが、 最終形は追加するclassのid指定部分をbodyやparentやthisにすることで、 id以外にもclassが追加できる仕様にする予定です。 よろしくお願いいたします。

  • JavaScriptエラーについて

    お世話になります。 おわかりになる方、ぜひ教えてください。 タブメニューのボタンを押すと、内容が切り替わるというJavaScriptなのですが、いちよう正常に動作はしているようなのですが、エラーがでてしまいます。 エラーを無くしたいのですが、どうすればいのでしょうか? 【エラー内容】 'document.getElementById()'はNullまたはオブジェクトではありません。 【HTML】 <div id="javascript_tab_sample"> <ul> <li><a href="#W3C">W3C</a></li> <li><a href="#xhtml">xhtml</a></li> </ul> <dl id="w3c"> <p>内容1</p> </dl> <dl id="xhtml"> <p>内容2</p> </dl> </div> 【JavaScript】 window.onload=function() { tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('w3c'), document.getElementById('xhtml') ] } tab.init(); } /*--setup end--*/ var tab = { init: function(){ var tabs = this.setup.tabs; var pages = this.setup.pages; for(i=0; i<pages.length; i++) { if(i !== 0) pages[i].style.display = 'none'; tabs[i].onclick = function(){ tab.showpage(this); return false; }; } }, showpage: function(obj){ var tabs = this.setup.tabs; var pages = this.setup.pages; var num; for(num=0; num<tabs.length; num++) { if(tabs[num] === obj) break; } for(var i=0; i<pages.length; i++) { if(i == num) { pages[num].style.display = 'block'; tabs[num].className = 'selected'; } else{ pages[i].style.display = 'none'; tabs[i].className = null; } } } } よろしくお願いします。

  • Javascriptの関数について

    Internet Explorer の右クリックメニューに登録するスクリプトを作っています。 たとえば、いま表示しているページのURLを表示する場合、 <script type="text/javascript"> var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = function() {   kansuu(URL); }; kansuu = function(url) {   alert(url); } </script> ↑は動きます。 また、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); function kansuu(url) {   alert(url); } ↑も動きます。 ところが、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); kansuu = function(url) {   alert(url); } は動きません。 なぜでしょうか? 理由を教えていただけると嬉しいです。 よろしくお願いします。

  • JavaScriptの論理演算子について

    JavaScriptの論理演算子について質問です。 「alert(e.target||e.srcElement);」の結果がtrue かfalseではなくて「object HTMLHtmlElement」となるのは何故なのでしょうか? JavaScriptでは"||"は論理演算子ではないのでしょうか? ----------------------------------------------------------------------- <body> <a id="id1">Textarea</a> <script> (function () {   var i = document.getElementById ("id1");   document.addEventListener("dblclick", addEL, false);   function addEL (e) { alert(e.target||e.srcElement);   } }) (); </script> </body>

  • JavaScriptでコンストラクタについて

    現在、JavaScriptを勉強中なのですが、 コンストラクタについて質問です。 下記のようなコードの場合、document.getElementByIdで取得したID 以外、使いまわしが出来ませんが、 コンストラクタを使って、1ページで複数使用出来るようにするには、 どのように記述すれば良いのでしょうか? //-----JavaScript----- function addEvent(elm,listener,fn){ try{ elm.addEventListener(listener,fn,false); }catch(e){ elm.attachEvent("on"+listener,fn); } } var c,y,m,d; addEvent(window,"load",function(){ c = document.getElementById("customer_birthday_c"); y = document.getElementById("customer_birthday_y"); m = document.getElementById("customer_birthday_m"); d = document.getElementById("customer_birthday_d"); if(c.options[0].selected == true){ y.disabled = true; m.disabled = true; d.disabled = true; } }); //-----JavaScript----- どなたかご教授ください。 宜しくお願いいたします。

  • javascriptで困っています

    スマホでタッチした場所の座標を取得しようとしているのですが、いろいろ調べて以下のように作ってみましたが、座標が取得できません。どこを直せばいいのか、教えていただきたく投稿させていただきました。よろしくお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"/> <meta name="viewport" content="width=320, user-scalable=no" /> <script type="text/javascript" charset="utf-8"> var touch_box = document.getElementById("box"); touch_box.addEventListener("touchstart", function(e){ document.getElementById("txt0").innerHTML = "スタート"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); touch_box.addEventListener("touchmove", function(e){ document.getElementById("txt0").innerHTML = "ムーブ"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); touch_box.addEventListener("touchend", function(e){ document.getElementById("txt0").innerHTML = "エンド"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); </script> </head> <body> <div id="box"> <span id="txt0"></span><br /> X:<span id="txt1"></span>, Y:<span id="txt2"></span><br /> </div> </body> </html>

  • javascriptの条件文

    スマホにタッチした時の値を取得するスクリプトです。 よくわからないまま作成してますが、ご勘弁下さい。 <script type="text/javascript"> window.document.addEventListener("touchstart", function(event){ event.preventDefault(); var result = document.getElementById("result"); result.innerHTML = "clientX:"+ event.touches[0].clientX+ "<br>" + "clientY:"+ event.touches[0].clientY; }, true); window.document.addEventListener("touchmove", function(event){ event.preventDefault(); var result = document.getElementById("result"); result.innerHTML = "clientX:"+ event.touches[0].clientX+ "<br>" + "clientY:"+ event.touches[0].clientY; }, true); window.document.addEventListener("touchend", function(event){ event.preventDefault(); var result = document.getElementById("result"); result.innerHTML = ""; }, true); ここまでは正常。 値を取得した、Yを下記のようにしたのですが、 500以上になってもロケーションが実行されません。 間違いなく構文が間違っているのですが、数時間格闘したのですが、わからないので すみませんが、教えて頂けると有難いです。 num = event.touches[0].clientY; if (num >= "500") { location.href = "https://www.google.co.jp/"; } </script>

  • javascriptについて

    現在HPを作成していてjavaのプルダウンメニューを設置していますが 最初からメニューが開いた状態になります。ちなみにsdmenu.jsを使用しています。 最初開いた時にメニューが閉じるようにできますでしょうか? function SDMenu(id) { if (!document.getElementById || !document.getElementsByTagName) return false; this.menu = document.getElementById(id); this.submenus = this.menu.getElementsByTagName("div"); this.remember = true; this.speed = 4; this.markCurrent = true; this.oneSmOnly = false; } SDMenu.prototype.init = function() { var mainInstance = this; for (var i = 0; i < this.submenus.length; i++) this.submenus[i].getElementsByTagName("span")[0].onclick = function() { mainInstance.toggleMenu(this.parentNode); }; if (this.markCurrent) { var links = this.menu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) if (links[i].href == document.location.href) { links[i].className = "current"; break; } } if (this.remember) { var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)"); var match = regex.exec(document.cookie); if (match) { var states = match[1].split(""); for (var i = 0; i < states.length; i++) this.submenus[i].className = (states[i] == 0 ? "collapsed" : ""); } } }; SDMenu.prototype.toggleMenu = function(submenu) { if (submenu.className == "collapsed") this.expandMenu(submenu); else this.collapseMenu(submenu); }; SDMenu.prototype.expandMenu = function(submenu) { var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var links = submenu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) fullHeight += links[i].offsetHeight; var moveBy = Math.round(this.speed * links.length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight + moveBy; if (newHeight < fullHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = ""; mainInstance.memorize(); } }, 30); this.collapseOthers(submenu); }; SDMenu.prototype.collapseMenu = function(submenu) { var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight - moveBy; if (newHeight > minHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = "collapsed"; mainInstance.memorize(); } }, 30); }; SDMenu.prototype.collapseOthers = function(submenu) { if (this.oneSmOnly) { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); } }; SDMenu.prototype.expandAll = function() { var oldOneSmOnly = this.oneSmOnly; this.oneSmOnly = false; for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className == "collapsed") this.expandMenu(this.submenus[i]); this.oneSmOnly = oldOneSmOnly; }; SDMenu.prototype.collapseAll = function() { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); }; SDMenu.prototype.memorize = function() { if (this.remember) { var states = new Array(); for (var i = 0; i < this.submenus.length; i++) states.push(this.submenus[i].className == "collapsed" ? 0 : 1); var d = new Date(); d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000)); } };

  • 以下のJavaScriptが、どんな動作をしているか教えて頂けないでし

    以下のJavaScriptが、どんな動作をしているか教えて頂けないでしょうか? var previousOnload = window.onload; window.onload = function() { if (previousOnload) { previousOnload(); } //radiobuttonIdは、radio buttonのIdです。 document.getElementById('radiobuttonId').checked = true; } if文の中でpreviousOnloadを呼んでるので、自分自身を呼んでると思うのですが、 特にwindow.onloadのfundtion()は何もreturnしてないので、if文に入ってるのが意味がわからなくて。。 どうぞ宜しくお願い致します。

専門家に質問してみよう