[35] [DFN[Selectors API]] ([DFN[選択子API]]) は、 [[CSS]] などで使われる[RUBY[[[選択子]]]@en[セレクター]]を使って
[[DOM節点]]にアクセスするための [[API]] です。

* 仕様書

[REFS[
- [36] [CITE@en-US[DOM Standard]] ([TIME[2015-01-14 18:37:27 +09:00]] 版) <https://dom.spec.whatwg.org/#interface-parentnode>
]REFS]

;; [47] かつては単独の仕様書が [[W3C勧告]]となっていましたが、現在は
[[DOM Standard]] に統合されています。

* メソッド

[37] [CODE(DOMi)@en[[[ParentNode]]]] [[インターフェイス]]に次の[[メソッド]]があります。
[FIG(short list)[
- [CODE(DOMm)@en[[[query]]]]
- [CODE(DOMm)@en[[[queryAll]]]]
- [CODE(DOMm)@en[[[querySelector]]]]
- [CODE(DOMm)@en[[[querySelectorAll]]]]
]FIG]

* 歴史

** 前史

[38] いくつかの [[JavaScript]] [[ライブラリー]]は、 [CODE@en[getElementsBySelector]]
のような機能を独自に実装していました。それを核に様々な機能を持った [[jQuery]]
は00年代末から10年代初めにかけて大流行しました。

[39] [[Web Applications 1.0]] (現 [[HTML Standard]]) は、そのような機能が必要であると指摘していました。ただし実際の [[API]] の規定にはまだ至っていませんでした。

** 誕生

[40] [[W3C]] [[Web APIs WG]] (現 [[WebApps WG]]) が [[Selectors API]]
を標準化することになりました。

[41] 提供する機能についてはあまり大きな議論は無かったようですが (ただし[[XML名前空間]]への対応は途中で実装困難と判断され、削除されています。)、
[[メソッド名]]をどうするかが問題となり、大論争となっています。

[1]
[CITE[Selectors API]] <http://www.w3.org/TR/2006/WD-selectors-api-20060525/>
([[名無しさん]] [WEAK[2006-06-10 14:09:00 +00:00]])

[2]
[CITE@en[Selectors API naming from Anne van Kesteren on 2007-01-25 (public-webapi@w3.org from January 2007)]] ([[Anne van Kesteren (annevk@opera.com)]] 著, [CODE[2007-01-27 12:55:58 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-webapi/2007Jan/0054>
([[名無しさん]] [WEAK[2007-01-27 03:56:31 +00:00]])

[3]
[CITE@en[Influence a future W3C Standard: Selectors API - SitePoint Forums]] ([CODE[2007-01-27 13:04:33 +09:00]] 版) <http://www.sitepoint.com/forums/showthread.php?t=454192>
([[名無しさん]] [WEAK[2007-01-27 04:06:36 +00:00]])

[4]
[CITE@en-AU[Selectors API Naming Debate - Lachy’s Log]] ([CODE[2007-06-24 16:58:06 +09:00]] 版) <http://lachy.id.au/log/2007/06/naming-debate>
([[名無しさん]] [WEAK[2007-06-24 09:01:31 +00:00]])

[5]
[CITE@en-AU[Selectors API Naming Debate Revisited - Lachy’s Log]] ([CODE[2007-09-07 22:50:45 +09:00]] 版) <http://lachy.id.au/log/2007/08/naming-debate-revisited>
([[名無しさん]])

[6]
[CITE@en[Results of Questionnaire Selectors API Method Names - Web-Based Straw-poll and Balloting System]] ([CODE[2007-09-05 22:11:14 +09:00]] 版) <http://www.w3.org/2002/09/wbs/38482/selectorsNames/results>
([[名無しさん]])

[7]
[CITE@en-US[Selectors API]] ([CODE[2007-10-19 23:39:31 +09:00]] 版) <http://www.w3.org/TR/2007/WD-selectors-api-20071019/>
([[名無しさん]])

[8]
[CITE@en-US[Selectors API]] ([CODE[2007-12-21 08:17:20 +09:00]] 版) <http://www.w3.org/TR/2007/WD-selectors-api-20071221/>
([[名無しさん]])

[9]
[CITE@en[dojo.query: A CSS Query Engine For Dojo | The Dojo Toolkit]] ([CODE[2007-12-31 20:26:51 +09:00]] 版) <http://dojotoolkit.org/node/336>
([[名無しさん]])


[10]
[CITE[Selectors APIがLast Callへ - vantguarde - web:g]] ([TIME[2008-11-03 23:16:44 +09:00]] 版) <http://web.g.hatena.ne.jp/vantguarde/20081030/1225341506>


[11]
[CITE@en-US[Selectors API]] ([TIME[2008-11-13 05:30:57 +09:00]] 版) <http://www.w3.org/TR/2008/WD-selectors-api-20081114/>

[12] [CITE@en-us[Firefox 3.1 for developers - MDC]] ([TIME[2009-02-08 18:25:06 +09:00]] 版) <https://developer.mozilla.org/ja/Firefox_3.1_for_developers#.E6.96.B0.E3.81.97.E3.81.8F.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.9F.E6.A9.9F.E8.83.BD_2>

>Selectors API が文書と要素の両方に追加されました。 document.querySelector()、 document.querySelectorAll()、element.querySelector()、及び element.querySelectorAll() を参照してください。

** Level 2 への動き

[42] メソッド名は大論争になったものの、それさえ収まれば標準化と実装はすぐに進みました。
更に追加の機能を Level 2 として規定しようとの動きがでてきます。

[13] [CITE@en['''['''selectors-api''']''' Summary of Feature Requests for v2]]
([[Lachlan Hunt]] 著, [TIME[2009-09-23 20:51:37 +09:00]] 版)
<http://lists.w3.org/Archives/Public/public-webapps/2009JulSep/1198.html>

[14] [CITE[Selectors APIのmatchesSelectorと、動的なページでのイベント処理 - 素人がプログラミングを勉強するブログ]] ([TIME[2009-10-20 00:38:04 +09:00]] 版) <http://d.hatena.ne.jp/javascripter/20091018/1255889085>

[15] [CITE@en-US[Selectors API Level 2]]
([TIME[2009-09-30 21:27:18 +09:00]] 版)
<http://dev.w3.org/cvsweb/~checkout~/2006/webapi/selectors-api2/Overview.html?content-type=text/html;%20charset=utf-8>

[16] [CITE@en[Selectors API 2 Status]]
([[Lachlan Hunt]] 著, [TIME[2009-11-05 05:07:30 +09:00]] 版)
<http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0478.html>

[17] [CITE[IRC logs: freenode / #whatwg / 20090925]]
([TIME[2009-11-17 00:09:05 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20090925#l-178>

[18] [CITE@en-US[Selectors API Level 1]]
([TIME[2009-12-19 03:19:03 +09:00]] 版)
<http://www.w3.org/TR/2009/CR-selectors-api-20091222/>

[19] [CITE@en-US[Selectors API Level 2]]
([TIME[2010-01-20 00:39:46 +09:00]] 版)
<http://www.w3.org/TR/2010/WD-selectors-api2-20100119/>

[20] [CITE@en-US[Selectors API Level 2]]
( ([TIME[2012-06-28 21:33:08 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-selectors-api2-20120628/>

[21] [CITE[IRC logs: freenode / #whatwg / 20120614]]
( ([TIME[2012-06-30 22:58:49 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120614#l-755>

[22] [CITE[IRC logs: freenode / #whatwg / 20121121]]
( ([TIME[2012-12-08 02:13:24 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121121#l-631>

[23] [CITE[IRC logs: freenode / #whatwg / 20121127]]
( ([TIME[2012-12-09 01:55:22 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121127#l-391>

[24] [CITE@en[Selector Parsing for Selectors API]]
( ([[Lachlan Hunt]] 著, [TIME[2012-10-30 19:42:22 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-style/2012Oct/0832.html>

[25] [CITE@en-US[Selectors API Level 1]]
( ([TIME[2012-12-12 23:56:57 +09:00]] 版))
<http://www.w3.org/TR/2012/PR-selectors-api-20121213/>

[26] [CITE@en[Re: ''''''[''''''selectors-api'''''']'''''' Consider backporting find() behavior to  querySelector()]]
( ([[Lachlan Hunt]] 著, [TIME[2012-06-20 23:26:14 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2012AprJun/1285.html>

[27] [CITE@en[''''''[''''''selectors-api'''''']'''''' All Issues Resolved]]
( ([[Lachlan Hunt]] 著, [TIME[2008-10-30 00:51:59 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2008OctDec/0200.html>

[48] Level 2 の開発では、[[メソッド名]]の命名問題が再燃したりもしました。
[CODE(CSS)@en[[[:scope]]]] [[擬似クラス]]の命名も問題になりました。

** DOM Standard への統合

[43] Level 2 の開発と実装がなかなか進まない中、曖昧だった [[W3C DOM]] にかわって厳密かつ現実的な
[[API]] を規定する [[DOM Standard]] が完成しており、 [[Selectors API]]
の機能と分量からそこに統合することが望ましいと考えられるようになりました。

[44] [[Selecetors API]] の編集者の [[lachlanhunt]] が2013年の年始に統合を試み、
同年9月に [[DOM Standard]] の編集者の [[Anne]] がこれを引き継ぎ、
[[Selectors API]] は (Level 2 の新機能も含めて) [[DOM]] に統合されることとなりました。

[45] [[W3C]] の [[Selectors API]] Level 2 も9月には [[WG Note]]
として出版され、正式に[[廃止]]されています。

;; [46] しかしながら、 Level 2 の新機能の実装はまだ進んでいません。

[REFS[
- [28] [CITE[Selectors API by lachlanhunt · Pull Request #4 · whatwg/dom]]
( ([TIME[2013-01-04 15:22:07 +09:00]] 版))
<https://github.com/whatwg/dom/pull/4>
- [29] [CITE@en-US[Selectors API Level 1]]
( ([TIME[2013-02-22 02:57:52 +09:00]] 版))
<http://www.w3.org/TR/2013/REC-selectors-api-20130221/>
- [30] [CITE[IRC logs: freenode / #whatwg / 20130807]]
( ([TIME[2013-08-10 18:33:17 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130807#l-666>
- [31] [CITE[Define querySelector and querySelectorAll in DOM. Some changes in Select... · 8e5f277 · whatwg/dom]] ([TIME[2013-09-13 07:35:28 +09:00]] 版) <https://github.com/whatwg/dom/commit/8e5f277ac8673b35661560f58aaf4951969d713f>
- [32] [CITE[IRC logs: freenode / #whatwg / 20130911]]
( ([TIME[2013-09-14 17:35:10 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130911>
- [33] [CITE[CVS log for 2006/webapi/selectors-api/Overview.html]]
( ([TIME[2013-10-12 08:35:47 +09:00]] 版))
<http://dev.w3.org/cvsweb/2006/webapi/selectors-api/Overview.html>
- [34] [CITE@en-US[Selectors API Level 2]]
( ([TIME[2013-10-16 22:12:11 +09:00]] 版))
<http://www.w3.org/TR/2013/NOTE-selectors-api2-20131017/>
]REFS]


[49] [CITE@en[Group common selectors algorithms in order to add a note that namespa… · whatwg/dom@dc355c6]]
([TIME[2015-08-04 14:36:37 +09:00]] 版)
<https://github.com/whatwg/dom/commit/dc355c6036b1b37bbd4c86827cacf6459f629c5e>

[50] [CITE@en[Comment out query/queryAll/Elements for now · whatwg/dom@10b6cf1]]
([TIME[2016-03-30 11:15:19 +09:00]] 版)
<https://github.com/whatwg/dom/commit/10b6cf1ba02806220d5461a3bdb7939728b73635>

[51] [CITE@en[Align with changes in Selectors]]
( ([[annevk]]著, [TIME[2016-06-10 16:44:08 +09:00]]))
<https://github.com/whatwg/dom/commit/1594aa52357371354780750413ad88e9e8a2b56b>

[52] [CITE@en[Align with Selectors]]
([[annevk]]著, [TIME[2018-02-19 22:25:24 +09:00]])
<https://github.com/whatwg/dom/commit/3f2620f52e8d192860c3460d8a4d41385befb545>

[53] [CITE@en[Align with Selectors by annevk · Pull Request #573 · whatwg/dom]]
([TIME[2018-02-21 10:28:00 +09:00]])
<https://github.com/whatwg/dom/pull/573>