

・jQueryセレクタ結果は、jQueryオブジェクトでしょうか？  
・それとも配列？  
・あるいは、DOMのような、配列っぽいけど厳密には配列ではないオブジェクト？


CC BY-SA 3.0
2015-09-03T03:38:14.723
15175
2015-09-09T14:28:43.207
7886
question
javascript jquery
jQueryセレクタ結果は、jQueryオブジェクト？ それとも配列？ もしくはそれ以外？


jQueryオブジェクトです。

jQueryのメソッドを指定できる(例：$(".classname").css("display","none")のようにできる、もし$(".classname")の結果が配列とかDOMエレメントリストのようなものなら実行できない）ことからも明らかですね。


CC BY-SA 3.0
2015-09-03T03:56:22.223
15176
2015-09-03T03:56:22.223
5044
15175
answer


微妙に認識が異なる気がしたので補足しますが、  
結論だけでよければ読まなくても大丈夫です。

返却値の話ですが、jQueryオブジェクトだとは思います。  
ですが、これは自身(コンストラクタでセレクタを元に継承された`$`)を返却しています。  
なので`$(".classname").css("display","none")`の`css`の実際の関数は  
`$.css`にあり、これを継承した自身を返しているので実行できるのです。

ですので、返却値を変数に入れる事で継承することが可能で、  
継承した後の変数では、jQueryオブジェクトで呼び出せる関数を実行する事が出来ます。

[code]

    //ただ単に代入してみよう
    var work = $("#sample_data");
    
    //返却値がjqueryオブジェクトならHTMLとれるよね？
    $("#res").append("["+work.html()+"]");
    $("#res").append("<br />");
    
    //DOMなら出せるよね
    $("#res").append("["+work.innerHTML+"]");
    $("#res").append("<br />");
    
    //ところで貴方の型は？
    $("#res").append("["+(typeof work)+"]<br />");
    
    
    
    $("#res").append("<hr />");
    //存在しないElement呼んだらどうするのよ
    $("#res").append("["+(typeof $("#not_found"))+"]<br />");
    
    
    
    //継承してみる
    work = new $("#sample_data");
    
    $("#res").append("<hr />");
    //代入と同じことしてみよう
    $("#res").append("["+work.html()+"]");
    $("#res").append("<br />");
    $("#res").append("["+work.innerHTML+"]");
    $("#res").append("<br />");
    $("#res").append("["+(typeof work)+"]<br />");
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <div id="sample_data"><span>span_node</span></div>
    <hr />
    <pre>
    <code id="res">
    </code>
    </pre>
[/code]


CC BY-SA 3.0
2015-09-03T05:25:28.277
15178
2015-09-03T05:25:28.277
7676
15175
answer


そういったことを調べるには、APIドキュメントを参照します。

~~

> 戻り値  
>  jQuery  
>  抽出されたjQueryオブジェクト

[jQuery(expression, context) -
jQuery日本語リファレンス](http://semooh.jp/jquery/api/core/jQuery/expression%2C+context/)

~~

> jQuery( selector [, context ] ) Returns: jQuery

<http://api.jquery.com/jQuery/>

したがってjQueryオブジェクトです。

* * *

こういった疑問は、自分で調べられるようになれば30秒もかからずにわかることです。  
結論を知るより、調べ方を知ったほうが有用です。

なお、「`$(".classname").css("display","none")`というコードを書いた覚えがあるからJQueryオブジェクトであるような気がする」というような曖昧な根拠でコードを書くのはやめたほうがいいです。APIは変わることがあるし、入力次第で別種のオブジェクトが返ってくることもあるし、似たようなAPIを備えた異なるオブジェクトも存在することがあります。唯一信用できるのは公式のAPIドキュメントだけです。

また、実験で確認するのは最後の手段です。APIドキュメントに記載されておらず、ソースコードを読んでも複雑すぎてわからないなら、仕方ないので実験して振る舞いを推測します。運が良ければ動きます。運が良ければ。


CC BY-SA 3.0
2015-09-09T13:25:12.757
16448
2015-09-09T14:28:43.207
2015-09-09T14:28:43.207
10330
10330
15175
answer