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

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

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

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

Q&A

解決済

4回答

1730閲覧

このエラーについて教えてください。

hsd

総合スコア17

JavaScript

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

0グッド

2クリップ

投稿2019/01/29 06:06

let controllers = document.querySelectorAll(".controller"); controllers[0].addEventListener( "click", function() { controllers.classList.add(".current"); // error Cannot read property 'add' of undefined }, controllers[1].addEventListener( "click", function() { console.log("hghg2"); }, controllers[2].addEventListener("click", function() { console.log("hghg3"); }) ) );

controllers[0].addEventListener(
"click",
function() {
controllers.classList.add(".current");
// error Cannot read property 'add' of undefined
},
この記述でクラスを付与しようとした時に、このようなエラーがでました。
これの解決の仕方がわからないのでご教授お願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

controllersに入っているのはquerySelectorAllの戻り値なので、ElementではなくNodeListです。

Element の querySelectorAll() メソッドは、与えられた CSS セレクターに一致する文書中の要素のリストを示す静的な (生きていない) NodeList を返します。

Document.querySelectorAll() | MDN

ですから、controllers[0].classList.add("current")といった感じで、配列のように添え字をつけるなどして扱ってください。

投稿2019/01/29 06:15

Lhankor_Mhy

総合スコア36074

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

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

hsd

2019/01/29 06:18

回答いただきありがとうございます! 無事、クラス付与することができました。 ありがとうございました。
guest

0

JavaScript

1controllers.classList.add(".current");

controllersは配列なので、classListというものはありません。
そのため、無いものにaddなんて無いぞってエラーになるわけです。

Elementを指定する必要があるので、添字をつけるなどが必要です。

投稿2019/01/29 06:13

dice142

総合スコア5158

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

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

0

> controllers[0].addEventListener(
"click",
function() {
controllers.classList.add(".current");
// error Cannot read property 'add' of undefined
},

controllersはNodeListですよね?
そもそもclassListを持っていないのでは?
それとクラスを追加するときにピリオド付きのクラス名は微妙・・・

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 var controllers = document.querySelectorAll(".controller"); 4 controllers[0].addEventListener("click",function() { 5 [].forEach.call(controllers,function(x){ 6 x.classList.add("current"); 7 }); 8 }); 9}); 10</script> 11 12<div class="controller">c1</div> 13<div class="controller">c2</div> 14<div class="controller">c3</div>

投稿2019/01/29 06:18

yambejp

総合スコア114775

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

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

0

https://qiita.com/takeharu/items/d75f96f81ff83680013f

addなんてしらんぞこのやろーって怒られてます。

Listに値を追加するのはJavaならaddですが、
javascriptならpushじゃなかったですっけ?


あ~なんか違いますね、普通のListじゃないんですね~よく読んでませんでした。

https://developer.mozilla.org/ja/docs/Web/API/Element/classList

例をみると".クラス名" じゃなくて "クラス名" として入れてますが
それでもエラーは出たままですか?


他の方も回答してくれてますね。
確かに配列から.classListをとってそこに値を追加してくれ~なんて無理な話なので、
for文回したり、値を付けたい要素を指定して.add()を使わないといけないっぽいですね
console.log()などで中身を見てみるとわかりやすいですよ

投稿2019/01/29 06:07

編集2019/01/29 06:16
azuapricot

総合スコア2341

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

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

hsd

2019/01/29 06:12

回答いただきありがとうございます! 一応参考にしたサイトのURLを貼らせていただきます。 ▽URL http://shanabrian.com/web/javascript/add-class.php javascriptもaddでいけるはずらしいのですが、、、 初心者なので知識がまだついてないのでお願いします。
hsd

2019/01/29 06:14

最初”クラス名”でエラーがでてしまい、”.クラス名”でやり直したところ同じエラーで怒られました。
hsd

2019/01/29 06:21

教えていただきありがとうございます。 今回から、活用してみます!
azuapricot

2019/01/29 06:22

解決したようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問