かなり大雑把な質問なのですが
htmlのタグをjavascriptの変数として代入する場合
代入されるhtmlの型を知っていないと関数を用いることができないと思うのですが、
型をどうやって調べたらいいかがわかりません。
どなたかご教授いただけないでしょうか?
よろしくお願いいたいます。
具体例
liの要素数を取得して、その要素数に応じて任意の要素のwidth(CSS)を変更しようと思っているのですが
下記のようなコードで要素数を取得することができるということがわかりました。
javascript
1$(function(){ 2 3 var $xxx = $('.class-name li'); 4 5 var tabsLiLen = $xxx.length; 6});
ただ、length関数はarray型にしか使えないと書かれており、
var $xxx = $('.class-name li');
ここで代入されている$('.class-name li')がarray型かどうかを探しても見つけることができませんでした。
そもそもjavascriptをあまりいじったことがなく、検索するための言葉さえも知らない状況ですので
型に関する検索ワードだけでも教えていただけると幸いです。
お願いいたします。
補足
HTMLの業務経験3年程度
C言語の業務経験3年程度
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/12 04:51
回答7件
0
length関数はarray型にしか使えないと書かれており
いえ、length
というプロパティがあれば、何にでも使えます。極端な話、var a = {length: 3}
というオブジェクトがあった場合、a.length
は3です。
ここで代入されている$('.class-name li')がarray型かどうか
これはjQueryオブジェクトだと思われます(参照)。
投稿2019/02/12 04:22
総合スコア145183
0
いろいろ意見があるところかと思いますが、JavaScriptはかなり「ダック・タイピング」なので、型を気にするよりも、そのインターフェース(的なもの)が目的に合致するかどうかを気にしたほうがいいと思います。
といいますのも、JavaScriptではインスタンスのプロパティの型を気軽に破壊できるので、オブジェクトの型が目的に合致していても、プロパティが合目的なのかどうかについては担保されないからです。
つまり例で言うと、length
プロパティが存在するかどうか、そしてそれが列挙可能なプロパティ数に合致するか、というところを(気にするとしたら)気にするべきかと思います。
投稿2019/02/12 04:51
総合スコア36104
0
ただ、length関数はarray型にしか使えないと書かれており、
出典は?とりあえず文字列でもlength
プロパティ(関数ではない)はありますよ。
【Array.length - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/length
【String.length - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/length
提示されているコードは jQuery というライブラリを使用したコードなので、length
が使えます。
【.length | jQuery API Documentation】
https://api.jquery.com/length/
一応「型」の取得方法(jQuery オブジェクトはobjectになると思うが)。
【typeof - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof
投稿2019/02/12 04:23
編集2019/02/12 04:27総合スコア69407
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/12 05:13
2019/02/12 05:19
2019/02/12 05:29
0
ベストアンサー
対象のオブジェクトに対してconsole.log()でlengthが使えるかどうか見れることは見れます。
(ブラウザデベロッパーツールの「コンソール」に結果が表示されます)
js
1 console.log($("div"));
つまり「Array型かどうか」ではなく「lengthが使えるかどうか」が本来得るべき情報かと思いますので、安心して使ってください(この言い方が適切かわかりませんが)
.class-name li
においてのlengthは要素があればその数が入ってきますしなければ0です。
ちなみに既に回答にあるとおり結局のところ「オブジェクト」として取得されるので、「同HTML内に1つのみ」が原則とされる「id」属性を直に指定しても「length」は使えます。入る値は0か1かですけど。
投稿2019/02/12 04:47
総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/12 05:01
2019/02/12 05:02
2019/02/12 05:03
2019/02/12 05:17
0
ただ、length関数はarray型にしか使えないと書かれており
length...関数?
いいえ、これはプロパティです。
C言語でいう構造体と似たようなもんで、
A.length自体は構造体Aに属するメンバー的な存在です。
まぁ、JavaScriptはオブジェクト指向プログラミング言語なんで、単なる構造体ではなくメンバー的存在のプロパティ以外にも、メソッドという関数をもたせる事も可能ですが……
もしかしてC言語ではBという構造体を宣言する時に、
既にAでlengthというメンバーを使ってたら同じメンバー名であるlengthはBでは定義出来ないんですか?
そうではありませんよね。それと同じです。
Aのプロパティとしてlengthを定義した後、
Bのプロパティとしてlengthを定義することも可能です。
そしてArrayにおいてのlengthは要素数、Stringにおいてのlengthは文字列長
ポリモーフィズムみたいな感じで様々な値がこのlengthプロパティを所持しています。
要するに何がlengthプロパティを持っていても不思議ではありません。
$('.class-name li')
がarray型かどうかを探しても見つけることができませんでした
$は単なるJavaScriptに於ける変数名として使って良いだけの変数名候補でしかありません。
つまり、$ is 何?
ってのが問題の99%です。
これに関してはJavaScriptで仕事した経験が長い人にしかピンと来ないかもしれませんね。
2006年に登場し、大流行したjQueryというライブラリがあります。
このライブラリを読み込むとグローバル変数領域にjQueryと$という変数名を確保する作りになっており、慣習的に$(xxx)
はjQueryとみなされます。
なので公式ドキュメントを見れば一撃です。
https://api.jquery.com/jQuery/
jQuery( selector [, context ] ) | Returns: jQuery
セレクター文字列を入れて検索した場合、
jQueryという型のインスタンスを返すと書いてありますね。
このReturns: jQuery
にリンクが張ってあるのでクリックして遷移してみましょう。
The jQuery object itself behaves much like an array; it has a
length
property
jQuery型のインスタンスはArrayに似た振る舞いをします。
lengrhプロパティを所持していますと書いてあります。
投稿2019/02/12 04:56
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
基本的にjavascriptの質問というよりはjQueryの質問ですよね?
jQueryでdom的なデータの掴み方をする場合は一つしかヒットしなくても
複数ヒットしても、一つもヒットしなくても常にlengthはもちます
気にせずにlengthは参照ください。
またヒットしない場合$(セレクタ).length==0で判断する場合もありますし
.is()で判断する場合もあります
投稿2019/02/12 04:45
総合スコア114829
0
結局何がしたいんでしょう。
型を調べるのが目的じゃないですよね?
$.isArray(知りたい奴)
で、配列かどうかの判定は出来ますが、これがしたいわけじゃないですよね。
いくつ要素が含まれているかわからず、複数あるならループして処理させたいけど単体だったらループしないし・・・とかで困っているなら、.each()
とか使えば、取り出した要素リストが単体でも複数でも同じように処理できますが、こういうことではなく?
投稿2019/02/12 04:27
総合スコア5405
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。