質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

516閲覧

jQueryではなくjavascriptでのイベントの書き方

flyingHigh

総合スコア41

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/11/18 10:14

編集2019/11/18 10:58

下記のようにボタン1またはボタン2を押下すると
コンテンツ全体を非表示にする場合、
jQueryではわかるのですが、javascriptではどのように書けばよいのでしょうか。
質問:
spanタグを直接選択するのではなく、wraper > inner > cont > span という風にたどって選択する方法はこれであっていますでしょうか。
js本文に足りない記述はありますでしょうか。

HTML

1<div id="wrapper"> 2 <div class="inner"> 3 <div class="cont"><span>ボタン1</span><span>ボタン2</span></div> 4 </div> 5</div>

CSS

1#wrapper{ 2 background:#eee; 3 width:300px; 4 hei 5} 6#wrapper span{ 7 margin-left:3em; 8 cursor:pointer; 9} 10.none{ 11 display:none; 12}

javascript

1var element = document.getElementById('wapper').getElementsByClassName('inner').getElementsByClassName('cont').getElementsByTagName('span'); 2 3var allContent = document.getElementById('wapper'); 4 5document.element.onclick = function() { 6 allContent.classList.add('none'); 7} 8```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/11/18 10:41

現在のコードにおける問題を「質問本文に」追記してください
m.ts10806

2019/11/18 10:42 編集

「うまくいかない」では他者にはなにも伝わりませんので。 それに「調べて書いた」だけでも何をもとに書いたのか誰にも伝わりません
hentaiman

2019/11/18 10:47

素のjavascriptでもjQueryと同じように選択できるが・・・
m.ts10806

2019/11/18 11:33

現在のコードにおける問題を追記してください。 「あってますか?」という聞き方だと「実行してみればわかります」という答えになります
guest

回答2

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 [].forEach.call(document.querySelectorAll('#wrapper span'),x=>{ 4 x.addEventListener('click',()=>{ 5 x.closest('#wrapper').style.display="none"; 6 }); 7 }); 8}); 9</script> 10<div id="wrapper"> 11 <div class="inner"> 12 <div class="cont"><span>ボタン1</span><span>ボタン2</span></div> 13 </div> 14</div>

投稿2019/11/18 10:52

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2019/11/18 11:52

'#wrapper span'よりは、'#wrapper .inner .cont span'の方が質問意図に近そうです。 現実的にはどうするのが賢いのか分かりませんけども…
flyingHigh

2019/11/19 12:16

ありがとうございます。 大体わかりました。 それぞれの意味を調べます。
guest

0

ベストアンサー

javascript

1 var element = document.getElementById('wrapper').getElementsByClassName('inner')[0].getElementsByClassName('cont')[0].getElementsByTagName('span'); 2 var allContent = document.getElementById('wrapper'); 3 for( var i=0,l=element.length; l>i; i++ ) { 4 element[i].onclick = function() { 5 allContent.classList.add('none'); 6 } 7 } 8

おかしかったところ

  1. getElementsByClassNameはHTMLCollectionを返すので、[0]が必要

getElementsByIdとは違ってgetElementsByClassNameは複数の要素がヒットする可能性があるので、HTMLCollection(配列のようなもの)で結果が返ります。
2. "wapper" -> "wrapper"タイプミス
3. "document.element.onclick" -> "element.onclick"の間違い
さらに、elementはHTMLCollectionなので、そのままonclickをセットできない。
=>forでループを回して一個ずつ(ボタン1とボタン2)処理を行う必要ありです。

投稿2019/11/18 11:10

KonPota

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flyingHigh

2019/11/19 12:18

より詳しく理解できそうです。 ありがとうございます。 タイプミスはお恥ずかしい。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問