è¦ç´ ãäºãã«è¿ãå ´åã«ã¯ DOM ããã²ã¼ã·ã§ã³ããããã£ã¯å½¹ç«ã¡ã¾ããããã§ã¯ãªãå ´åããã¼ã¸ã®ä»»æã®è¦ç´ ã¯ã©ã®ããã«åå¾ã§ããã§ããããï¼
ãã®ããã®è¿½å ã®æ¤ç´¢ã¡ã½ãããããã¾ãã
document.getElementById ããã㯠åã« id
è¦ç´ ã« id 屿§ãããã¨ãdocument.getElementById(id) ã¡ã½ããã使ç¨ãããã¨ã§è¦ç´ ãåå¾ã§ãã¾ãã
ä¾:
<div id="elem">
<div id="elem-content">Element</div>
</div>
<script>
// è¦ç´ ãåå¾
let elem = document.getElementById('elem');
// èæ¯ã赤ã«ãã¾ã
elem.style.background = 'red';
</script>
ã¾ããè¦ç´ ãåç
§ãã id ã§ååä»ããããã°ãã¼ãã«å¤æ°ãããã¾ã:
<div id="elem">
<div id="elem-content">Element</div>
</div>
<script>
// elem 㯠id="elem" ã® DOM è¦ç´ ãåç
§ãã¾ã
elem.style.background = 'red';
// id="elem-content" ã¯ãã¤ãã³ãããã®ã§å¤æ°åã«ã¯ã§ãã¾ããã
// ããè§æ¬å¼§ã使ç¨ãã¦ã¢ã¯ã»ã¹ã§ãã¾ã: window['elem-content']
</script>
åãååã® JavaScript 夿°ã宣è¨ããªãéãããã®å¤ãåªå ããã¾ã:
<div id="elem"></div>
<script>
let elem = 5;
alert(elem); // 夿°ã¯è¦ç´ ã䏿¸ããã¾ã
</script>
ãã®æ¯ãèã㯠ã¹ãã㯠ã§èª¬æããã¦ããã®ã§ãæ¨æºã®1ã¤ã§ãããã主ã«äºææ§ã®ããã«ãµãã¼ãããã¦ãã¾ãã
ãã©ã¦ã¶ã¯ JS 㨠DOM ã®åå空éãæ··å¨ããããã¨ã§å©ãããã¨ãã¾ããã·ã³ãã«ãªã¹ã¯ãªããã§ããã°ããã§ãããä¸è¬çã«ã¯è¯ããã¨ã§ã¯ããã¾ãããååãè¡çªããå¯è½æ§ãããã¾ããã¾ããJS ãè¦ã¦ãHTMLãè¦ãªãã£ãå ´åã夿°ãã©ãããæ¥ãã®ããæç½ã§ã¯ããã¾ããã
ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ãè¦ç´ ãç´æ¥åç
§ããããã« id ãé »ç¹ã«ä½¿ãã¾ããããããã¯ç©äºãçãä¿ã¤ããã ãã§ãã
å®éã«ã¯ãdocument.getElementById ã好ã¾ããæ¹æ³ã§ãã
id ã¯ã¦ãã¼ã¯ã§ãªããã°ãªãã¾ããid ã¯ä¸æã§ãªããã°ãªãã¾ãããä¸ãããã id ã®è¦ç´ ã¯ããã¥ã¡ã³ãä¸ã§1ã¤ã ãã§ãã
åã id ãæã¤è¦ç´ ãè¤æ°ããå ´åã対å¿ããã¡ã½ããã®æ¯ãèãã¯äºæ¸¬ã§ãã¾ãããä¾ãã°ãdocument.getElementById ã¯ã©ã³ãã ã§è©²å½ããè¦ç´ ã®ãã¡1ã¤ãè¿ãããããã¾ããããã®ãããid ã¯ä¸æã¨ãªãããæ³¨æãã¦ãã ããã
document.getElementById ã¯ããã¾ãããanyNode.getElementById ã¯ããã¾ããã¡ã½ãã getElementById 㯠document ãªãã¸ã§ã¯ãã«å¯¾ãã¦ã®ã¿å¼ã³åºãå¯è½ã§ããããã¯ããã¥ã¡ã³ãå
¨ä½ããæå®ããã id ãæ¢ãã¾ãã
querySelectorAll
æãç¨éã®åºãã¡ã½ãã elem.querySelectorAll(css) ã¯ãæå®ããã CSS ã»ã¬ã¯ã¿ã¼ã«ä¸è´ãã elem å
ã®ãã¹ã¦ã®è¦ç´ ãè¿ãã¾ãã
以ä¸ã§ã¯ãæå¾ã®åè¦ç´ ã¨ãªããã¹ã¦ã® <li> è¦ç´ ãæ¢ãã¾ã:
<ul>
<li>The</li>
<li>test</li>
</ul>
<ul>
<li>has</li>
<li>passed</li>
</ul>
<script>
let elements = document.querySelectorAll('ul > li:last-child');
for (let elem of elements) {
alert(elem.innerHTML); // "test", "passed"
}
</script>
ä»»æã® CSS ã»ã¬ã¯ã¿ãæ¸ããã®ã§ãã®ã¡ã½ããã¯å¼·åã§ãã
:hover ã :active ã®ãã㪠CSS ã»ã¬ã¯ã¿ã®æ¬ä¼¼ã¯ã©ã¹ããµãã¼ãããã¦ãã¾ããä¾ãã°ãdocument.querySelectorAll(':hover') ã¯ãã¤ã³ã¿ãããè¦ç´ ã®ã³ã¬ã¯ã·ã§ã³ãè¿ãã¾ãï¼ãã¹ãé ã¯ãæãå¤å´ã® <html> ããæããã¹ãããããã®ã®é ã§ãï¼ã
querySelector
elem.querySelector(css) ã¯ãæå®ããã CSS ã»ã¬ã¯ã¿ã®æåã®è¦ç´ ãè¿ãã¾ãã
ã¤ã¾ããelem.querySelectorAll(css)[0] ã¨åãçµæã«ãªãã¾ãããå¾è
㯠ãã¹ã¦ã® è¦ç´ ãæ¢ã1ã¤ãè¿ãã䏿¹ãelem.querySelector ã¯1ã¤ã ããæ¢ãã¾ãããªã®ã§ãå¦çãéããè¨è¿°ãããçããªãã¾ãã
matches
ããã¾ã§ã®ã¡ã½ãã㯠DOM ãæ¤ç´¢ãã¦ãã¾ããã
elem.matches(css) ã¯ä½ãæ¢ãã¾ãããããã¯åã« elem ãä¸ãããã CSS ã»ã¬ã¯ã¿ã«ä¸è´ãããããã§ãã¯ããtrue ã¾ã㯠false ãè¿ãã¾ãã
ãã®ã¡ã½ããã¯ãè¦ç´ (é åãä½ã)ãå復å¦çããèå³ã®ãããã®ããã£ã«ã¿ãããã¨ããã¨ãã«ä¾¿å©ã§ãã
ä¾ãã°:
<a href="http://example.com/file.zip">...</a>
<a href="http://ya.ru">...</a>
<script>
// document.body.children ã®ä»£ããã«ä»»æã®ã³ã¬ã¯ã·ã§ã³ãå¯è½ã§ã
for (let elem of document.body.children) {
if (elem.matches('a[href$="zip"]')) {
alert("The archive reference: " + elem.href );
}
}
</script>
closest
è¦ç´ ã® ç¥å ã¯ãè¦ç´ ã®è¦ªã親ã®è¦ªãããã«ãã®è¦ªãªã©ã§ããç¥å ã¯ã該å½è¦ç´ ããæä¸é¨ã¾ã§ã®è¦ªã®ãã§ã¼ã³ãå½¢æãã¾ãã
ã¡ã½ãã elem.closest(css) 㯠CSS ã»ã¬ã¯ã¿ã«ãããããæãè¿ãç¥å
ãè¦ã¾ããelem èªèº«ãæ¤ç´¢å¯¾è±¡ã«å«ã¾ãã¦ãã¾ãã
ã¤ã¾ããã¡ã½ãã closest ã¯è¦ç´ (elem)ããä¸ã«é²ã¿ã親ããã§ãã¯ãã¦ããã¾ããã»ã¬ã¯ã¿ã«ãããããããæ¤ç´¢ãæ¢ããã®ç¥å
ãè¿å´ãã¾ãã
ä¾:
<h1>Contents</h1>
<div class="contents">
<ul class="book">
<li class="chapter">Chapter 1</li>
<li class="chapter">Chapter 1</li>
</ul>
</div>
<script>
let chapter = document.querySelector('.chapter'); // LI
alert(chapter.closest('.book')); // UL
alert(chapter.closest('.contents')); // DIV
alert(chapter.closest('h1')); // null (h1 ã¯ç¥å
ã§ã¯ãªãã®ã§)
</script>
getElementsBy*
ä»ã«ãã¿ã°ãã¯ã©ã¹ãªã©ã§ãã¼ããæ¢ãã¡ã½ãããããã¾ãã
querySelector ã®ã»ããããå¼·åã§ãçãæ¸ããã¨ãã§ããããã仿¥ããããã¯ã»ã¨ãã©æ´å²çãªèæ¯ã«ããåå¨ããã¡ã½ããã¨ãªã£ã¦ãã¾ãã
ãã®ãããããã§ã¯ä¸»ã«å®å ¨ãæãããã«ãããã説æãã¾ããå¤ãã¹ã¯ãªããã§ã¯ãããç®ã«ãããã¨ãããããããã¾ããã
elem.getElementsByTagName(tag)ã¯æå®ãããã¿ã°ã®è¦ç´ ãæ¢ãããã®ã³ã¬ã¯ã·ã§ã³ãè¿ãã¾ããtagãã©ã¡ã¼ã¿ã¯ âä»»æã®ã¿ã°â ã¨ãã¦ã¢ã¹ã¿ãªã¹ã¯"*"ãæå®å¯è½ã§ããelem.getElementsByClassName(className)ã¯æå®ããã CSS ã¯ã©ã¹ãæã¤è¦ç´ ãè¿ãã¾ããdocument.getElementsByName(name)ã¯æå®ãããname屿§ãæã¤è¦ç´ ãããã¥ã¡ã³ãå ¨ä½ã§è¿ãã¾ãããã£ãã«ä½¿ããã¾ããã
ä¾:
// ããã¥ã¡ã³ãä¸ã®ãã¹ã¦ã® div ãåå¾
let divs = document.getElementsByTagName('div');
ãã¼ãã«å
ã®ãã¹ã¦ã® input ã¿ã°ãè¦ã¤ãã¾ããã:
<table id="table">
<tr>
<td>Your age:</td>
<td>
<label>
<input type="radio" name="age" value="young" checked> less than 18
</label>
<label>
<input type="radio" name="age" value="mature"> from 18 to 50
</label>
<label>
<input type="radio" name="age" value="senior"> more than 60
</label>
</td>
</tr>
</table>
<script>
let inputs = table.getElementsByTagName('input');
for (let input of inputs) {
alert( input.value + ': ' + input.checked );
}
</script>
"s" ã®æåãå¿ããªãã§ãã ãã!åå¿è
ã®éçºè
ã¯æå "s" ãå¿ãããã¨ãããã¾ããã¤ã¾ããgetElementsByTagName ã®ä»£ããã« getElementByTagName ãå¼ã³åºããã¨ãã¾ãã
"s" æå㯠getElementById ã«ã¯ããã¾ãããããã¯ãåä¸ã®è¦ç´ ãè¿ãããã§ãã ããããgetElementsByTagName ã¯è¦ç´ ã®éåãè¿ãã¾ãããããã£ã¦ "s" ãã¤ãã¾ãã
ãã1ã¤ãåºãç¥ããã¦ããåå¿è ã®ééãã¯ãã®ããã«æ¸ããã¨ã§ã:
// åä½ãã¾ãã
document.getElementsByTagName('input').value = 5;
ããã¯åä½ãã¾ããããªããªããã㯠input ã®ã³ã¬ã¯ã·ã§ã³ãåå¾ãããã®ä¸ã®è¦ç´ ã§ã¯ãªãã³ã¬ã¯ã·ã§ã³èªä½ã«å¤ãä»£å ¥ããããã§ãã
ã³ã¬ã¯ã·ã§ã³ãå復ããããæ°å¤ã§è¦ç´ ãåå¾ããããè¡ã£ãå¾ã«ä»£å ¥ãã¾ãã:
// åä½ãã¾ã(input ãããå ´å)
document.getElementsByTagName('input')[0].value = 5;
.article è¦ç´ ãæ¢ãã¾ã:
<form name="my-form">
<div class="article">Article</div>
<div class="long article">Long article</div>
</form>
<script>
// name 屿§ã§è¦ã¤ãã
let form = document.getElementsByName('my-form')[0];
// form ã®å
å´ã§ãclass ã§è¦ã¤ãã
let articles = form.getElementsByClassName('article');
alert(articles.length); // 2, class "article" ãæã¤è¦ç´ ã2ã¤è¦ã¤ããã¾ãã
</script>
ã©ã¤ã(åç)ãªã³ã¬ã¯ã·ã§ã³
ãã¹ã¦ã® "getElementsBy*" ã¡ã½ãã㯠ã©ã¤ã(åç)㪠ã³ã¬ã¯ã·ã§ã³ãè¿ãã¾ãããã®ãããªã³ã¬ã¯ã·ã§ã³ã¯å¸¸ã«ããã¥ã¡ã³ãã®ç¾å¨ã®ç¶æ
ãåæ ãã夿´ããã£ãã¨ã âèªåæ´æ°â ããã¾ãã
ä¸ã®ä¾ã§ã¯ã2ã¤ã®ã¹ã¯ãªãããããã¾ãã
- æåã®ã¹ã¯ãªããã¯
<div>ã®ã³ã¬ã¯ã·ã§ã³ã¸ã®åç §ãçæãã¾ããä»ã®ã¨ããããã®é·ãã¯1ã§ãã - 2ã¤ç®ã®ã¹ã¯ãªããã¯ãã©ã¦ã¶ã1ã¤ä»¥ä¸ã®
<div>ã«ä¼ã£ãå¾ã«å®è¡ããã®ã§ããã®é·ãã¯2ã§ãã
<div>First div</div>
<script>
let divs = document.getElementsByTagName('div');
alert(divs.length); // 1
</script>
<div>Second div</div>
<script>
alert(divs.length); // 2
</script>
対ç
§çã«ãquerySelectorAll 㯠éç㪠ã³ã¬ã¯ã·ã§ã³ã§ããããã¯åºå®è¦ç´ é
åã§ãã
代ããã«ããã使ã£ãå ´åã両æ¹ã®ã¹ã¯ãªãã㯠1 ãåºåãã¾ã:
<div>First div</div>
<script>
let divs = document.querySelectorAll('div');
alert(divs.length); // 1
</script>
<div>Second div</div>
<script>
alert(divs.length); // 1
</script>
ä»ãã®éããç°¡åã«è¦ããã¨ãã§ãã¾ããéçãªã³ã¬ã¯ã·ã§ã³ã¯ãããã¥ã¡ã³ãä¸ã«æ°ã㪠div ã®ç»å ´ã®å¾ãå¢å ãã¾ããã§ããã
ãµããª
DOM ã§ãã¼ããæ¤ç´¢ããããã®6ã¤ã®ä¸»ãªã¡ã½ãããããã¾ã:
æã使ãããã®ã¯ querySelector 㨠querySelectorAll ã§ãããgetElement(s)By* ã¯ãã¾ã«å½¹ç«ã¤ããå¤ãã¹ã¯ãªããã«å«ã¾ãã¦ãã¾ãã
ãã®ä»:
elemãæå®ããã CSS ã»ã¬ã¯ã¿ã«ä¸è´ãããããã§ãã¯ããelem.matches(css)ãããã¾ãã- æå®ããã CSS ã»ã¬ã¯ã¿ã«ä¸è´ããæãè¿ãç¥å
ãæ¢ãããã®
elem.closest(css)ãããã¾ããelemèªèº«ããã§ãã¯ããã¾ãã
ã¾ãã親åã®é¢ä¿ã調ã¹ãããä¸ã¤ã®æ¹æ³ãããã§è¨åãã¾ããã:
elemA.contains(elemB)ã¯elemBãelemAã®ä¸ã«ãã(elemAã®åå«)ã¾ãã¯elemA==elemBã®å ´å true ãè¿ãã¾ãã

ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã