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

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

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

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

Q&A

解決済

4回答

3793閲覧

Javascript 変数に$('クラス名')を代入

avajava

総合スコア11

JavaScript

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

0グッド

1クリップ

投稿2019/05/29 16:29

編集2019/05/29 17:03

かなり初歩的な質問と思いますがお力添えいただきたく存じます。

画像をランダムに表示するスライドショーを実現させたくて、あるサイトを参考にしました。
そこに記載されていたコードです。Javascriptです。

Javascript

1var $slideshow = $('.slideshow'); 2var $slide = $('.slide');

これは変数に何を代入していますか。コード内には$という関数は定義されていません。.slideshowと.slideはdiv要素に付いているクラス名です。
どうかよろしくお願いいたします。

【追記】
サイトのURLは以下です。
http://sakamock.hatenablog.com/entry/2017/01/12/132656

コードを読み進めると以下の記述がありました。

Javascript

1function randomize(selector){ 2 $slideshow.find(selector).sort(function(){ 3 return Math.round(Math.random()) - 0.5; 4 }).detach().appendTo($slideshow); 5}

2行目で$slideshowに対してfind()関数を呼び出していますが、記述を簡単にするために$slideshowに$('.slideshow')という文字列を代入したという解釈は間違っていますか。

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

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

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

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

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

avajava

2019/05/29 16:58

申し訳ありません。ご指摘ありがとうございます。
guest

回答4

0

ベストアンサー

ライブラリ

http://sakamock.hatenablog.com/entry/2017/01/12/132656

その記事からリンクされているjsfiddleに行けば、jQuery 3.1.1を使用しいることが分かります。
https://jsfiddle.net/sakmak/zf7mejrx/3/

HTMLソースにある https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.js を開けば、公式サイトも分かります。
http://kenwheeler.github.io/slick/

変数を使用する意図

2行目で$slideshowに対してfind()関数を呼び出していますが、記述を簡単にするために$slideshowに$('.slideshow')という文字列を代入したという解釈は間違っていますか。

$('.slideshow') を複数回呼び出す場合、「1回目の返り値」と「2回目以降の返り値」が等しくなります。
(1回目と2回目以降の間に jQuery('.slideshow') の返り値を変化させる処理が入った場合を除きます)

すると、2回目以降に全く同じ処理をさせるので、関数処理コストが無駄になります。
変数に関数の返り値をキャッシュしておけば、この問題は解消されます。

Re: jaaaa さん

投稿2019/05/29 23:44

編集2019/05/30 03:14
think49

総合スコア18162

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

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

avajava

2019/05/30 13:24

回答ありがとうございます。そこまで頭がまわりませんでした。リンクを貼って下さりありがとうございます。関数処理コストをかけないために変数に代入しているのですね。詳しく教えていただきありがとうございました。
guest

0

「何が代入されたか」はconsole.log()で確認できます。

js

1var $slideshow = $('.slideshow'); 2console.log($slideshow);

ブラウザデベロッパーツール「Console」を確認してみてください。

なぜ当該結果が出力されているかを詳しく知るにはセレクタという概念を知る必要があります。
※日本語良ければこの辺り→Selectors:セレクタとかSelectors/API/jQuery
解説記事:【jQuery】要素を指定するセレクタの使い方 まとめ

投稿2019/05/30 00:05

m.ts10806

総合スコア80850

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

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

avajava

2019/05/30 13:36

回答ありがとうございます。Consoleで確認したら大量の行の何かが代入されていました。これが.slideshowを付与されたdiv要素がjQueryオブジェクトに変換された姿なのでしょうか。参考のリンクをありがとうございます。読んでみます。
m.ts10806

2019/05/30 22:05

「何か」ではなくちゃんと意味のある情報なのでひとつひとつ読みといてください。
avajava

2019/05/31 15:21

そうですよね。頑張ります。回答ありがとうございましたm(_ _)m
guest

0

サイトのURLがないので断言できませんが、9割がたjQuery(jQuery関数)です。

jQueryのライブラリをロードすると、内部で$ = jQueryというようにグローバル変数が定義されます。

変数には、jQuery関数の実行結果であるjQueryオブジェクトが格納されています。


もちろん、ただの変数ですので$ = 1のように上書きできますし、サイトによってはjQueryをそのままの名前で使って、$は他のことに使っているかもしれません。ただ、あまりにも「$jQuery」という慣習が根付いているので、かなりのレアケースです。

投稿2019/05/29 16:48

編集2019/05/29 16:50
NozomuIkuta

総合スコア1260

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

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

avajava

2019/05/29 17:09

回答ありがとうございます。jQuery関数の実行結果が格納されるのですね。よく調べてみます。丁寧にありがとうございましたm(_ _)m
guest

0

2行目で$slideshowに対してfind()関数を呼び出していますが、記述を簡単にするために$slideshowに$('.slideshow')という文字列を代入したという解釈は間違っていますか。

間違ってます。

var $slideshow = $('.slideshow');

ここで代入したのはjqueryオブジェクト。.find('.slideshow')を入れているのと同じ。
変数名をslideshowではなく$slideshowとしているのは一目でjqueryオブジェクトだと分かるようにするため。

以下追記

<div id="oshiri">kajirimusi</div> (function(){ var a = $("#oshiri").html(); var b = $(document).find("#oshiri").html(); alert(a); alert(b); if(a === b){ alert('same'); }else{ alert('diff'); } })();

投稿2019/05/29 18:13

編集2019/05/30 13:58
hentaiman

総合スコア6415

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

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

avajava

2019/05/30 13:18

回答ありがとうございます。変数名の先頭に$をつけている理由まで教えていただきありがとうございます。 jQueryオブジェクトについて調べて納得しました。.slideshowと.slideに対してjQueryのメソッド等を使うためにjQueryオブジェクトを取得しているのですね。しかし.find('.slideshow')を入れているのと同じ。という点がよく分かりません。よろしければより詳細に教えていただきたいです。
hentaiman

2019/05/30 14:00

コードを追記しました。見て何となくイメージつけばと
avajava

2019/05/31 17:06

コードの追記までしてくださりありがとうございます。追記してくださったコードのように、find()関数の実行結果としてjQueryオブジェクトが返されるのを利用してjQueryオブジェクトの取得・代入が出来るのですね。(解釈が間違っていたら申し訳ありません) 詳細に教えてくださりありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問