【脱jQuery】JavaScriptへの書き換え Selectors編
モダンJavaScriptの進化によって、jQueryが担っていた多くの役割は標準APIで代替可能になりました。本記事では特に需要の高いセレクタに焦点を当て、jQueryの記法をネイティブJavaScriptへどのように移行するかを網羅的にまとめています。
$('*')
全ての要素を選択します。
$('*')
document.querySelectorAll('*')
動作を確認する
$(':root')
ドキュメントのルート要素を選択します。
$(':root')
document.querySelector(':root')
動作を確認する
$('div')
指定された要素名と一致する全ての要素を選択します。
$('div')
document.querySelectorAll('div')
動作を確認する
<div>DIV1</div>
<div>DIV2</div>
<span>SPAN</span>
$('div')
// =>
// [
// <div>DIV1</div>,
// <div>DIV2</div>,
// ]
document.querySelectorAll('div')
$('#id')
指定されたid属性値と一致する要素を選択します。
$('#myDiv')
document.querySelector('#myDiv')
動作を確認する
<div id="notMe"><p>id="notMe"</p></div>
<div id="myDiv">id="myDiv"</div>
$('#myDiv')
// => <div id="myDiv">id="myDiv"</div>
document.querySelector('#myDiv')
$('.class')
指定されたクラス名と一致する全ての要素を取得します。
$('.myClass')
document.querySelectorAll('.myClass')
動作を確認する
<div class="notMe">div class="notMe"</div>
<div class="myClass">div class="myClass"</div>
<span class="myClass">span class="myClass"</span>
$('.myClass')
// =>
// [
// <div class="myClass">div class="myClass"</div>,
// <span class="myClass">span class="myClass"</span>,
// ]
document.querySelectorAll('.myClass')
$('prev + next')
直前に兄弟要素prevをもつnextに一致する全ての要素を選択します。
$('label + input')
document.querySelectorAll('label + input')
動作を確認する
<form>
<label for="name">Name:</label>
<input name="name" id="name">
<fieldset>
<label for="newsletter">Newsletter:</label>
<input name="newsletter" id="newsletter">
</fieldset>
</form>
<input name="none">
$('label + input')
// =>
// [
// <input name="name" id="name">,
// <input name="newsletter" id="newsletter">,
// ]
document.querySelectorAll('label + input')
$('prev ~ siblings')
prev要素に続く全ての兄弟要素のうち、siblingsに一致する全ての要素を選択します。
$('#prev ~ div')
document.querySelectorAll('#prev ~ div')
動作を確認する
<div>div (doesn't match since before #prev)</div>
<span id="prev">span#prev</span>
<div>div sibling</div>
<div>div sibling <div id="small">div niece</div></div>
<span>span sibling (not div)</span>
<div>div sibling</div>
$('#prev ~ div')
// =>
// [
// <div>div sibling</div>,
// <div>div sibling <div id="small">div niece</div></div>,
// <div>div sibling</div>,
// ]
document.querySelectorAll('#prev ~ div')
$('parent child')
指定された親要素のうち、全ての子孫要素を選択します。
$('form input')
document.querySelectorAll('form input')
動作を確認する
<form>
<div>Form is surrounded by the green border.</div>
<label for="name">Child of form:</label>
<input name="name" id="name">
<fieldset>
<label for="newsletter">Grandchild of form, child of fieldset:</label>
<input name="newsletter" id="newsletter">
</fieldset>
</form>
$('form input')
// =>
// [
// <input name="name" id="name">,
// <input name="newsletter" id="newsletter">,
// ]
document.querySelectorAll('form input')
$('parent > child')
親要素の子孫要素のうち、直接の子要素を全て選択します。
$('ul.topnav > li')
document.querySelectorAll('ul.topnav > li')
動作を確認する
<ul class="topnav">
<li>Item 1</li>
<li>Item 2
<ul>
<li>Nested item 1</li>
<li>Nested item 2</li>
<li>Nested item 3</li>
</ul>
</li>
<li>Item 3</li>
</ul>
$('ul.topnav > li')
// =>
// [
// <li>Item 1</li>,
// <li>Item 2
// <ul>
// <li>Nested item 1</li>
// <li>Nested item 2</li>
// <li>Nested item 3</li>
// </ul>
// </li>,
// <li>Item 3</li>,
// ]
document.querySelectorAll('ul.topnav > li')
$('[name]')
指定された属性と一致する全ての要素を選択します。
$('div[id]')
document.querySelectorAll('div[id]')
動作を確認する
<div>no id</div>
<div id="hey">with id</div>
<div id="there">has an id</div>
<div>nope</div>
$('div[id]')
// =>
// [
// <div id="hey">with id</div>,
// <div id="there">has an id</div>,
// ]
document.querySelectorAll('div[id]')
$('[name="value"]')
指定された属性値と完全に一致する全ての要素を選択します。
$('input[value="Hot Fuzz"]')
document.querySelectorAll('input[value="Hot Fuzz"]')
動作を確認する
<div>
<label>
<input type="radio" name="newsletter" value="Hot Fuzz">
<span>name?</span>
</label>
</div>
<div>
<label>
<input type="radio" name="newsletter" value="Cold Fusion">
<span>value?</span>
</label>
</div>
<div>
<label>
<input type="radio" name="newsletter" value="Evil Plans">
<span>value?</span>
</label>
</div>
$('input[value="Hot Fuzz"]')
// =>
// [
// <input type="radio" name="newsletter" value="Hot Fuzz">,
// ]
document.querySelectorAll('input[value="Hot Fuzz"]')
$('[name!="name"]')
指定された属性をもたないか、その属性値と一致しない全ての要素を選択します。
$('input[name!="newsletter"]')
document.querySelectorAll('input:not([name="newsletter"])')
動作を確認する
<div>
<input type="radio" name="newsletter" value="Hot Fuzz">
<span>name is newsletter</span>
</div>
<div>
<input type="radio" value="Cold Fusion">
<span>no name</span>
</div>
<div>
<input type="radio" name="accept" value="Evil Plans">
<span>name is accept</span>
</div>
$('input[name!="newsletter"]')
// =>
// [
// <input type="radio" value="Cold Fusion">,
// <input type="radio" name="accept" value="Evil Plans">,
// ]
document.querySelectorAll('input:not([name="newsletter"])')
$('[name~="value"]')
指定された属性値がスペースで区切られた全ての要素を選択します。
$('input[name~="man"]')
document.querySelectorAll('input[name~="man"]')
動作を確認する
<input name="man-news">
<input name="milk man">
<input name="letterman2">
<input name="newmilk">
$('input[name~="man"]')
// =>
// [
// <input name="milk man">,
// ]
document.querySelectorAll('input[name~="man"]')
$('[name|="value"]')
指定された属性値と一致するか、その属性値にハイフンが続く全ての要素を選択します。
$('a[hreflang|="en"]')
document.querySelectorAll('a[hreflang|="en"]')
動作を確認する
<a href="example.html" hreflang="en">Some text</a>
<a href="example.html" hreflang="en-UK">Some other text</a>
<a href="example.html" hreflang="english">will not be outlined</a>
$('a[hreflang|="en"]')
// =>
// [
// <a href="example.html" hreflang="en">Some text</a>,
// <a href="example.html" hreflang="en-UK">Some other text</a>,
// ]
document.querySelectorAll('a[hreflang|="en"]')
$('[name^="value"]')
指定された属性値で始まる全ての要素を選択します。
$('input[name^="news"]')
document.querySelectorAll('input[name^="news"]')
動作を確認する
<input name="newsletter">
<input name="milkman">
<input name="newsboy">
$('input[name^="news"]')
// =>
// [
// <input name="newsletter">,
// <input name="newsboy">,
// ]
document.querySelectorAll('input[name^="news"]')
$('[name$="value"]')
指定された属性値で終わる全ての要素を選択します。
$('input[name$="letter"]')
document.querySelectorAll('input[name$="letter"]')
動作を確認する
<input name="newsletter">
<input name="milkman">
<input name="jobletter">
$('input[name$="letter"]')
// =>
// [
// <input name="newsletter">,
// <input name="jobletter">,
// ]
document.querySelectorAll('input[name$="letter"]')
$('[name*="value"]')
指定された属性値を部分的に含む全ての要素を選択します。
$('input[name*="man"]')
document.querySelectorAll('input[name*="man"]')
動作を確認する
<input name="man-news">
<input name="milkman">
<input name="letterman2">
<input name="newmilk">
$('input[name*="man"]')
// =>
// [
// <input name="man-news">,
// <input name="milkman">,
// <input name="letterman2">,
// ]
document.querySelectorAll('input[name*="man"]')
$('[name1="value1"][name2="value2"]')
指定された属性フィルターの全てに一致する全ての要素を選択します。
$('input[id][name$="man"]')
document.querySelectorAll('input[id][name$="man"]')
動作を確認する
<input id="man-news" name="man-news">
<input name="milkman">
<input id="letterman" name="new-letterman">
<input name="newmilk">
$('input[id][name$="man"]')
// =>
// [
// <input id="letterman" name="new-letterman">,
// ]
document.querySelectorAll('input[id][name$="man"]')
$('selector1, selector2, selectorN')
指定された全てのセレクタの組み合わせを選択します。
$('div, span, p.myClass')
document.querySelectorAll('div, span, p.myClass')
動作を確認する
<div>div</div>
<p class="myClass">p class="myClass"</p>
<p class="notMyClass">p class="notMyClass"</p>
<span>span</span>
$('div, span, p.myClass')
// =>
// [
// <div>div</div>,
// <p class="myClass">p class="myClass"</p>,
// <span>span</span>,
// ]
document.querySelectorAll('div, span, p.myClass')
$(':first-child')
兄弟要素のうち、全ての最初の要素を選択します。
$('div span:first-child')
document.querySelectorAll('div span:first-child')
動作を確認する
<div>
<span>John,</span>
<span>Karl,</span>
<span>Brandon</span>
</div>
<div>
<span>Glen,</span>
<span>Tane,</span>
<span>Ralph</span>
</div>
$('div span:first-child')
// =>
// [
// <span>John,</span>,
// <span>Glen,</span>,
// ]
document.querySelectorAll('div span:first-child')
$(':last-child')
兄弟要素のうち、全ての最後の要素を選択します。
$('div span:last-child')
document.querySelectorAll('div span:last-child')
動作を確認する
<div>
<span>John,</span>
<span>Karl,</span>
<span>Brandon,</span>
<span>Sam</span>
</div>
<div>
<span>Glen,</span>
<span>Tane,</span>
<span>Ralph,</span>
<span>David</span>
</div>
$('div span:last-child')
// =>
// [
// <span>Sam</span>,
// <span>David</span>,
// ]
document.querySelectorAll('div span:last-child')
$(':only-child')
全ての親要素の唯一の子要素を選択します。
$('div button:only-child')
document.querySelectorAll('div button:only-child')
動作を確認する
<div>
<button>Sibling!</button>
<button>Sibling!</button>
</div>
<div>
<button>Sibling!</button>
</div>
<div>
None
</div>
<div>
<button>Sibling!</button>
<button>Sibling!</button>
<button>Sibling!</button>
</div>
<div>
<button>Sibling!</button>
</div>
$('div button:only-child')
// =>
// [
// <button>Sibling!</button>,
// <button>Sibling!</button>,
// ]
document.querySelectorAll('div button:only-child')
$(':nth-child(n)')
兄弟要素のうち、全てのn番目の要素を選択します。
$('ul li:nth-child(2)')
document.querySelectorAll('ul li:nth-child(2)')
動作を確認する
<div>
<ul>
<li>John</li>
<li>Karl</li>
<li>Brandon</li>
</ul>
</div>
<div>
<ul>
<li>Sam</li>
</ul>
</div>
<div>
<ul>
<li>Glen</li>
<li>Tane</li>
<li>Ralph</li>
<li>David</li>
</ul>
</div>
$('ul li:nth-child(2)')
// =>
// [
// <li>Karl</li>,
// <li>Tane</li>,
// ]
document.querySelectorAll('ul li:nth-child(2)')
$(':nth-last-child(n)')
兄弟要素のうち、末尾から数えて全てのn番目の要素を選択します。
$('ul li:nth-last-child(2)')
document.querySelectorAll('ul li:nth-last-child(2)')
動作を確認する
<div>
<ul>
<li>John</li>
<li>Karl</li>
<li>Adam</li>
</ul>
</div>
<div>
<ul>
<li>Dan</li>
</ul>
</div>
<div>
<ul>
<li>Dave</li>
<li>Rick</li>
<li>Timmy</li>
<li>Gibson</li>
</ul>
</div>
$('ul li:nth-last-child(2)')
// =>
// [
// <li>Karl</li>,
// <li>Timmy</li>,
// ]
document.querySelectorAll('ul li:nth-last-child(2)')
$(':first-of-type')
同じ要素名の兄弟要素のうち、全ての最初の要素を選択します。
$('span:first-of-type')
document.querySelectorAll('span:first-of-type')
動作を確認する
<div>
<span>Corey,</span>
<span>Yehuda,</span>
<span>Adam,</span>
<span>Todd</span>
</div>
<div>
<b>Nobody,</b>
<span>Jörn,</span>
<span>Scott,</span>
<span>Timo</span>
</div>
$('span:first-of-type')
// =>
// [
// <span>Corey,</span>,
// <span>Jörn,</span>,
// ]
document.querySelectorAll('span:first-of-type')
$(':last-of-type')
同じ要素名の兄弟要素のうち、全ての最後の要素を選択します。
$('span:last-of-type')
document.querySelectorAll('span:last-of-type')
動作を確認する
<div>
<span>Corey,</span>
<span>Yehuda,</span>
<span>Adam,</span>
<span>Todd</span>
</div>
<div>
<span>Jörn,</span>
<span>Scott,</span>
<span>Timo,</span>
<b>Nobody</b>
</div>
$('span:last-of-type')
// =>
// [
// <span>Todd</span>,
// <span>Timo,</span>,
// ]
document.querySelectorAll('span:last-of-type')
$(':only-of-type')
同じ要素名の兄弟要素のうち、全ての親要素の唯一の子要素を選択します。
$('button:only-of-type')
document.querySelectorAll('button:only-of-type')
動作を確認する
<div>
<button>Sibling!</button>
<button>Sibling!</button>
</div>
<div>
<button>Sibling!</button>
</div>
<div>
None
</div>
<div>
<button>Sibling!</button>
<span>Sibling!</span>
<span>Sibling!</span>
</div>
<div>
<button>Sibling!</button>
</div>
$('button:only-of-type')
// =>
// [
// <button>Sibling!</button>,
// <button>Sibling!</button>,
// <button>Sibling!</button>,
// ]
document.querySelectorAll('button:only-of-type')
$(':nth-of-type(n)')
同じ要素名の兄弟要素のうち、全てのn番目の要素を選択します。
$('span:nth-of-type(2)')
document.querySelectorAll('span:nth-of-type(2)')
動作を確認する
<div>
<span>John</span>,
<b>Kim</b>,
<span>Adam</span>,
<b>Rafael</b>,
<span>Oleg</span>
</div>
<div>
<b>Dave</b>,
<span>Ann</span>
</div>
<div>
<i><span>Maurice</span></i>,
<span>Richard</span>,
<span>Ralph</span>,
<span>Jason</span>
</div>
$('span:nth-of-type(2)')
// =>
// [
// <span>Adam</span>,
// <span>Ralph</span>,
// ]
document.querySelectorAll('span:nth-of-type(2)')
$(':nth-last-of-type(n)')
同じ要素名の兄弟要素のうち、末尾から数えて全てのn番目の要素を選択します。
$('ul li:nth-last-of-type(2)')
document.querySelectorAll('ul li:nth-last-of-type(2)')
動作を確認する
<div>
<ul>
<li>John</li>
<li>Karl</li>
<li>Adam</li>
</ul>
</div>
<div>
<ul>
<li>Dan</li>
</ul>
</div>
<div>
<ul>
<li>Dave</li>
<li>Rick</li>
<li>Timmy</li>
<li>Gibson</li>
</ul>
</div>
$('ul li:nth-last-of-type(2)')
// =>
// [
// <li>Karl</li>,
// <li>Timmy</li>,
// ]
document.querySelectorAll('ul li:nth-last-of-type(2)')
$(':not()')
指定されたセレクタに一致しない全ての要素を選択します。
$('input:not(:checked) + span')
document.querySelectorAll('input:not(:checked) + span')
動作を確認する
<div>
<input type="checkbox" name="a">
<span>Mary</span>
</div>
<div>
<input type="checkbox" name="b">
<span>lcm</span>
</div>
<div>
<input type="checkbox" name="c" checked="checked">
<span>Peter</span>
</div>
$('input:not(:checked) + span')
// =>
// [
// <span>Mary</span>,
// <span>lcm</span>,
// ]
document.querySelectorAll('input:not(:checked) + span')
$(':has()')
指定されたセレクタと一致する要素を少なくとも1つ含む全ての要素を選択します。
$('div:has(p)')
document.querySelectorAll('div:has(p)')
動作を確認する
<div><p>Hello in a paragraph</p></div>
<div>Hello again! (with no paragraph)</div>
$('div:has(p)')
// =>
// [
// <div><p>Hello in a paragraph</p></div>,
// ]
document.querySelectorAll('div:has(p)')
$(':lang()')
指定された言語の全ての子孫要素を選択します。
$('div:lang(es-es)')
document.querySelectorAll('div:lang(es-es)')
動作を確認する
<h3>USA</h3>
<div lang="en-us">red
<div>white
<div>and blue</div>
</div>
</div>
<h3>España</h3>
<div lang="es-es">rojo
<div>amarillo
<div>y rojo</div>
</div>
</div>
$('div:lang(es-es)')
// =>
// [
// <div lang="es-es">rojo
// <div>amarillo
// <div>y rojo</div>
// </div>
// </div>,
// <div>amarillo
// <div>y rojo</div>
// </div>,
// <div>y rojo</div>,
// ]
document.querySelectorAll('div:lang(es-es)')
$(':contains()')
指定された文字列を含む全ての要素を取得します。
$('div:contains(John)')
Array.from(document.querySelectorAll('div')).filter(div => {
return div.textContent.includes('John')
})
動作を確認する
<div>John Resig</div>
<div>George Martin</div>
<div>Malcom John Sinclair</div>
<div>J. Ohn</div>
$('div:contains(John)')
// =>
// [
// <div>John Resig</div>,
// <div>Malcom John Sinclair</div>,
// ]
Array.from(document.querySelectorAll('div')).filter(div => {
return div.textContent.includes('John')
})
$(':empty')
子要素(テキストノードを含む)をもたない全ての要素を選択します。
$('td:empty')
Array.from(document.querySelectorAll('td')).filter(td => {
return !Array.from(td.childNodes).some(node => node.nodeType < 6)
})
動作を確認する
<table border="1">
<tr><td>TD #0</td><td></td></tr>
<tr><td>TD #2</td><td></td></tr>
<tr><td></td><td>TD#5</td></tr>
</table>
$('td:empty')
// =>
// [
// <td></td>,
// <td></td>,
// <td></td>,
// ]
Array.from(document.querySelectorAll('td')).filter(td => {
return !Array.from(td.childNodes).some(node => node.nodeType < 6)
})
$(':parent')
子要素(テキストノードを含む)をもつ全ての要素を選択します。
$('td:parent')
Array.from(document.querySelectorAll('td')).filter(td => {
return td.childNodes.length > 0
})
動作を確認する
<table border="1">
<tr><td>Value 1</td><td></td></tr>
<tr><td>Value 2</td><td></td></tr>
</table>
$('td:parent')
// =>
// [
// <td>Value 1</td>,
// <td>Value 2</td>,
// ]
Array.from(document.querySelectorAll('td')).filter(td => {
return td.childNodes.length > 0
})
$(':header')
全ての見出し要素を選択します。
$(':header')
document.querySelectorAll('h1, h2, h3, h4, h5, h6')
動作を確認する
<h1>Header 1</h1>
<p>Contents 1</p>
<h2>Header 2</h2>
<p>Contents 2</p>
$(':header')
// =>
// [
// <h1>Header 1</h1>,
// <h2>Header 2</h2>,
// ]
document.querySelectorAll('h1, h2, h3, h4, h5, h6')
$(':button')
全ての<button>要素を選択します。
$(':button')
document.querySelectorAll('button, input[type="button"]')
動作を確認する
<form>
<fieldset>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</fieldset>
</form>
$(':button')
// =>
// [
// <input type="button" value="Input Button">,
// <button>Button</button>,
// ]
document.querySelectorAll('button, input[type="button"]')
$(':text')
type属性の値がtext、またはtype属性が指定されていない全ての<input>要素を選択します。
$(':text')
Array.from(document.querySelectorAll('input')).filter(input => {
return (input.getAttribute('type') ?? 'text').toLowerCase() === 'text'
})
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<input type>
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$(':text')
// =>
// [
// <input type="text">,
// ]
Array.from(document.querySelectorAll('input')).filter(input => {
return (input.getAttribute('type') ?? 'text').toLowerCase() === 'text'
})
$(':checkbox')
type属性の値がcheckboxの全ての<input>要素を選択します。
$(':checkbox')
document.querySelectorAll('[type="checkbox"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$(':checkbox')
// =>
// [
// <input type="checkbox">,
// <input type="checkbox">,
// ]
document.querySelectorAll('[type="checkbox"]')
$(':radio')
type属性の値がradioの全ての<input>要素を選択します。
$('form input:radio')
document.querySelectorAll('form input[type="radio"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio" name="asdf">
<input type="radio" name="asdf">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$('form input:radio')
// =>
// [
// <input type="radio" name="asdf">,
// <input type="radio" name="asdf">,
// ]
document.querySelectorAll('form input[type="radio"]')
$(':password')
type属性の値がpasswordの全ての<input>要素を選択します。
$('input:password')
document.querySelectorAll('input[type="password"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$('input:password')
// =>
// [
// <input type="password">,
// ]
document.querySelectorAll('input[type="password"]')
$(':image')
type属性の値がimageの全ての<input>要素を選択します。
$(':image')
document.querySelectorAll('[type="image"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$(':image')
// =>
// [
// <input type="image">,
// ]
document.querySelectorAll('[type="image"]')
$(':file')
type属性の値がfileの全ての<input>要素を選択します。
$('input:file')
document.querySelectorAll('input[type="file"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select><option>Option</option></select>
<textarea></textarea>
<button>Button</button>
</form>
$('input:file')
// =>
// [
// <input type="file">,
// ]
document.querySelectorAll('input[type="file"]')
$(':input')
全ての<input>, <select>, <textarea>, <button>要素を選択します。
$(':input')
document.querySelectorAll('input, select, textarea, button')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$(':input')
// =>
// [
// <input type="button" value="Input Button">,
// <input type="checkbox">,
// <input type="file">,
// <input type="hidden">,
// <input type="image">,
// <input type="password">,
// <input type="radio">,
// <input type="reset">,
// <input type="submit">,
// <input type="text">,
// <select>
// <option>Option</option>
// </select>,
// <textarea></textarea>,
// <button>Button</button>,
// ]
document.querySelectorAll('input, select, textarea, button')
$(':submit')
type属性の値がsubmit、または<form>要素内の<button>要素のうち明示的にtype属性の値にbuttonが指定されていない全ての要素を選択します。
$(':submit')
document.querySelectorAll('[type="submit"], form button:not([type="button"])')
動作を確認する
<form>
<table id="exampleTable" border="1" cellpadding="10" align="center">
<tr>
<th>
Element Type
</th>
<th>
Element
</th>
</tr>
<tr>
<td>
<input type="button" value="Input Button">
</td>
</tr>
<tr>
<td>
<input type="checkbox">
</td>
</tr>
<tr>
<td>
<input type="file">
</td>
</tr>
<tr>
<td>
<input type="hidden">
</td>
</tr>
<tr>
<td>
<input type="image">
</td>
</tr>
<tr>
<td>
<input type="password">
</td>
</tr>
<tr>
<td>
<input type="radio">
</td>
</tr>
<tr>
<td>
<input type="reset">
</td>
</tr>
<tr>
<td>
<input type="submit">
</td>
</tr>
<tr>
<td>
<input type="text">
</td>
</tr>
<tr>
<td>
<select><option>Option</option></select>
</td>
</tr>
<tr>
<td>
<textarea></textarea>
</td>
</tr>
<tr>
<td>
<button type>Button</button>
<button>Button</button>
</td>
</tr>
<tr>
<td>
<button type="submit">Button type="submit"</button>
</td>
</tr>
</table>
</form>
$(':submit')
// =>
// [
// <input type="submit">,
// <button type>Button</button>,
// <button>Button</button>,
// <button type="submit">Button type="submit"</button>,
// ]
document.querySelectorAll('[type="submit"], form button:not([type="button"])')
$(':reset')
type属性の値がresetの全ての<input>要素を選択します。
$('input:reset')
document.querySelectorAll('input[type="reset"]')
動作を確認する
<form>
<input type="button" value="Input Button">
<input type="checkbox">
<input type="file">
<input type="hidden">
<input type="image">
<input type="password">
<input type="radio">
<input type="reset">
<input type="submit">
<input type="text">
<select>
<option>Option</option>
</select>
<textarea></textarea>
<button>Button</button>
</form>
$('input:reset')
// =>
// [
// <input type="reset">,
// ]
document.querySelectorAll('input[type="reset"]')
$(':hidden')
全ての非表示になっている要素を選択します。
$('body :hidden')
Array.from(document.querySelectorAll('body *')).filter(node => {
return node.offsetParent === null && node.getClientRects().length === 0
})
動作を確認する
<span style="position: fixed;"></span>
<div></div>
<div style="display: none;">Hider!</div>
<div></div>
<div></div>
<form>
<input type="hidden">
<input type="hidden">
<input type="hidden">
</form>
$('body :hidden')
// =>
// [
// <div style="display: none;">Hider!</div>,
// <input type="hidden">,
// <input type="hidden">,
// <input type="hidden">,
// ]
Array.from(document.querySelectorAll('body *')).filter(node => {
return node.offsetParent === null && node.getClientRects().length === 0
})
$(':visible')
全ての表示されている要素を選択します。
$('div:visible')
Array.from(document.querySelectorAll('div')).filter(div => {
return div.getClientRects().length > 0
})
動作を確認する
<div style="position: fixed;"></div>
<div></div>
<div></div>
<div style="display:none;"></div>
$('div:visible')
// =>
// [
// <div style="position: fixed;"></div>,
// <div></div>,
// <div></div>,
// ]
Array.from(document.querySelectorAll('div')).filter(div => {
return div.getClientRects().length > 0
})
$(':animated')
$(':focus')
現在フォーカスされている要素を選択します。
$(':focus')
$('input:focus')
document.activeElement
document.querySelector('input:focus')
動作を確認する
<div id="content">
<input tabIndex="1">
<input tabIndex="2">
<select tabIndex="3">
<option>select menu</option>
</select>
<div tabIndex="4">
a div
</div>
</div>
$(':focus')
$('input:focus')
document.activeElement
document.querySelector('input:focus')
$(':enabled')
全ての有効な要素を選択します。
$('input:enabled')
document.querySelectorAll('input:enabled')
動作を確認する
<form>
<input name="email" disabled="disabled">
<input name="id">
</form>
$('input:enabled')
// =>
// [
// <input name="id">,
// ]
document.querySelectorAll('input:enabled')
$(':disabled')
全ての無効な要素を選択します。
$('input:disabled')
document.querySelectorAll('input:disabled')
動作を確認する
<form>
<input name="email" disabled="disabled">
<input name="id">
</form>
$('input:disabled')
// =>
// [
// <input name="email" disabled="disabled">,
// ]
document.querySelectorAll('input:disabled')
$(':checked')
チェックまたはセレクトされた全ての要素を選択します。
$(':checked')
document.querySelectorAll(':checked')
動作を確認する
<form>
<p>
<input type="checkbox" name="newsletter" value="Hourly" checked="checked">
<input type="checkbox" name="newsletter" value="Daily">
<input type="checkbox" name="newsletter" value="Weekly">
<input type="checkbox" name="newsletter" value="Monthly" checked>
<input type="checkbox" name="newsletter" value="Yearly">
</p>
</form>
$(':checked')
// =>
// [
// <input type="checkbox" name="newsletter" value="Hourly" checked="checked">,
// <input type="checkbox" name="newsletter" value="Monthly" checked>,
// ]
document.querySelectorAll(':checked')
$(':selected')
セレクトされている全ての要素を選択します。
$('select option:selected')
document.querySelectorAll('select option:checked')
動作を確認する
<select name="garden" multiple="multiple">
<option>Flowers</option>
<option selected="selected">Shrubs</option>
<option>Trees</option>
<option selected="selected">Bushes</option>
<option>Grass</option>
<option>Dirt</option>
</select>
$('select option:selected')
// =>
// [
// <option selected="selected">Shrubs</option>,
// <option selected="selected">Bushes</option>,
// ]
document.querySelectorAll('select option:checked')
Discussion