<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C</id>
	<title>JavaScriptの基礎 - DOM操作 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;action=history"/>
	<updated>2026-04-26T01:21:09Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14389&amp;oldid=prev</id>
		<title>Wiki: /* data属性 (dataset) */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14389&amp;oldid=prev"/>
		<updated>2026-02-21T15:13:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;data属性 (dataset)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年2月22日 (日) 00:13時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l502&quot;&gt;502行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;502行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 区切り文字  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 区切り文字  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ハイフン &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;|| なし（大文字で区切る）&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ハイフン &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt; &lt;/ins&gt;|| なし（大文字で区切る）&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 先頭文字  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 先頭文字  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-14388:rev-14389:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14388&amp;oldid=prev</id>
		<title>Wiki: /* data属性 (dataset) */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14388&amp;oldid=prev"/>
		<updated>2026-02-21T15:13:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;data属性 (dataset)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年2月22日 (日) 00:13時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l508&quot;&gt;508行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;508行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 記述例  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 記述例  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;my-variable-name&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;|| &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;myVariableName&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;/ &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;MyVariableName&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| my-variable-name || myVariableName / MyVariableName&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 主な用途  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 主な用途  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| CSS クラス名・ID、URL スラッグ、HTML 属性、ファイル名 || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;変数名・関数名（Java&lt;/del&gt;, C#, JavaScript 等）、クラス名（PascalCase）&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| CSS クラス名・ID、URL スラッグ、HTML 属性、ファイル名 || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;変数名・メソッド名（Java&lt;/ins&gt;, C#, JavaScript 等）、クラス名（PascalCase）&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 言語・環境の例  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 言語・環境の例  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| HTML, CSS, Lisp 系, REST &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;API のエンドポイント &lt;/del&gt;|| C#, Java, JavaScript, TypeScript, Swift&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| HTML, CSS, Lisp 系, REST &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;APIのエンドポイント &lt;/ins&gt;|| C#, Java, JavaScript, TypeScript, Swift&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 大文字・小文字の区別  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! 大文字・小文字の区別  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-14387:rev-14388:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14387&amp;oldid=prev</id>
		<title>Wiki: /* data属性 (dataset) */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14387&amp;oldid=prev"/>
		<updated>2026-02-21T15:12:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;data属性 (dataset)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年2月22日 (日) 00:12時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l528&quot;&gt;528行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;528行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 使用可能（推奨） || 非推奨（大文字が小文字に正規化される場合がある）&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 使用可能（推奨） || 非推奨（大文字が小文字に正規化される場合がある）&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/center&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l568&quot;&gt;568行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;569行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/center&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/center&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== クラス操作 (classList) ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== クラス操作 (classList) ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;classList&amp;lt;/code&amp;gt; プロパティは、要素のCSSクラスを操作するためのメソッドを提供する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;classList&amp;lt;/code&amp;gt; プロパティは、要素のCSSクラスを操作するためのメソッドを提供する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-14386:rev-14387:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14386&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == DOM (Document Object Model) は、HTML または XMLドキュメントをプログラムから操作するためのAPIである。&lt;br&gt; &lt;br&gt; WebブラウザはHTMLを解析し、各要素をノードオブジェクトとして表現した木構造 (DOMツリー) をメモリ上に構築する。&lt;br&gt; JavaScriptはこのDOMツリーにアクセスし、要素の取得・作成・追加・削除、属性やスタイルの変更、ツリーの走査といっ…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=JavaScript%E3%81%AE%E5%9F%BA%E7%A4%8E_-_DOM%E6%93%8D%E4%BD%9C&amp;diff=14386&amp;oldid=prev"/>
		<updated>2026-02-21T15:11:32Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == DOM (Document Object Model) は、HTML または XMLドキュメントをプログラムから操作するためのAPIである。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; WebブラウザはHTMLを解析し、各要素をノードオブジェクトとして表現した木構造 (DOMツリー) をメモリ上に構築する。&amp;lt;br&amp;gt; JavaScriptはこのDOMツリーにアクセスし、要素の取得・作成・追加・削除、属性やスタイルの変更、ツリーの走査といっ…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
DOM (Document Object Model) は、HTML または XMLドキュメントをプログラムから操作するためのAPIである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
WebブラウザはHTMLを解析し、各要素をノードオブジェクトとして表現した木構造 (DOMツリー) をメモリ上に構築する。&amp;lt;br&amp;gt;&lt;br /&gt;
JavaScriptはこのDOMツリーにアクセスし、要素の取得・作成・追加・削除、属性やスタイルの変更、ツリーの走査といった操作を行う。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
主要なDOM操作は以下の通りである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DOM操作の主な機能一覧&lt;br /&gt;
! 機能 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| 要素の取得 || &amp;lt;code&amp;gt;querySelector&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;getElementById&amp;lt;/code&amp;gt; 等のメソッドで、DOMツリーから特定の要素を取得する。&lt;br /&gt;
|-&lt;br /&gt;
| 要素の作成・追加・削除 || &amp;lt;code&amp;gt;createElement&amp;lt;/code&amp;gt; で要素を生成し、&amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; 等でDOMツリーを変更する。&lt;br /&gt;
|-&lt;br /&gt;
| テキスト・HTMLコンテンツの操作 || &amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt; 等で要素のコンテンツを読み書きする。&lt;br /&gt;
|-&lt;br /&gt;
| 属性・スタイル操作 || &amp;lt;code&amp;gt;setAttribute&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;classList&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; 等でHTML属性やCSSを操作する。&lt;br /&gt;
|-&lt;br /&gt;
| DOM走査 || &amp;lt;code&amp;gt;parentElement&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;children&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;closest&amp;lt;/code&amp;gt; 等でツリーを移動する。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;なお、React等のUIフレームワークは仮想DOMを介して実際のDOM操作を最小限に抑えるため、開発者がDOMを直接操作することは原則として無い。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
バニラJavaScriptにおけるDOM操作の理解は、フレームワークの動作原理を把握する上でも重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOMの基本 ==&lt;br /&gt;
==== DOMツリー ====&lt;br /&gt;
WebブラウザはHTMLドキュメントを読み込むと、その構造をメモリ上にツリー状のオブジェクト (DOMツリー) として構築する。&amp;lt;br&amp;gt;&lt;br /&gt;
このDOMツリーは、HTML要素の親子関係・兄弟関係をそのまま反映している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
例えば、以下に示すようなHTMLがあるとする。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
       &amp;lt;title&amp;gt;ページタイトル&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
       &amp;lt;h1&amp;gt;見出し&amp;lt;/h1&amp;gt;&lt;br /&gt;
       &amp;lt;p&amp;gt;段落テキスト&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
このHTMLは、以下に示すようなDOMツリーに変換される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 Document&lt;br /&gt;
 └── html (ELEMENT_NODE)&lt;br /&gt;
        ├── head (ELEMENT_NODE)&lt;br /&gt;
        │      └── title (ELEMENT_NODE)&lt;br /&gt;
        │             └── &amp;quot;ページタイトル&amp;quot; (TEXT_NODE)&lt;br /&gt;
        └── body (ELEMENT_NODE)&lt;br /&gt;
               ├── h1 (ELEMENT_NODE)&lt;br /&gt;
               │      └── &amp;quot;見出し&amp;quot; (TEXT_NODE)&lt;br /&gt;
               └── p (ELEMENT_NODE)&lt;br /&gt;
                      └── &amp;quot;段落テキスト&amp;quot; (TEXT_NODE)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DOMツリーの各要素はノードと呼ばれ、JavaScriptからアクセスおよび操作が可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ノードの種類 ====&lt;br /&gt;
DOMツリーの各ノードは &amp;lt;code&amp;gt;nodeType&amp;lt;/code&amp;gt; プロパティを持ち、ノードの種類を数値で表す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
下表に、主なノード型を示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 主なノード型&lt;br /&gt;
! nodeType値 !! 定数名 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ELEMENT_NODE || HTML要素ノード (&amp;lt;code&amp;gt;&amp;amp;lt;div&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt; 等)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || TEXT_NODE || テキストノード (要素内のテキスト内容)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || COMMENT_NODE || コメントノード (&amp;lt;code&amp;gt;&amp;amp;lt;!-- ... --&amp;amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DOCUMENT_NODE || ドキュメントノード (&amp;lt;code&amp;gt;document&amp;lt;/code&amp;gt; オブジェクト)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DOCUMENT_TYPE_NODE || DOCTYPE宣言ノード&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DOCUMENT_FRAGMENT_NODE || ドキュメントフラグメントノード&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;p&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 console.log(element.nodeType)                // 1 (ELEMENT_NODE)&lt;br /&gt;
 console.log(element.firstChild.nodeType)     // 3 (TEXT_NODE)&lt;br /&gt;
 console.log(element.nodeName)                // &amp;quot;P&amp;quot;&lt;br /&gt;
 console.log(element.firstChild.nodeValue)    // テキスト内容&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
通常のDOM操作では、要素ノード (ELEMENT_NODE) を主に扱うが、テキストノードやコメントノードの存在も理解しておく必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 要素の取得 ==&lt;br /&gt;
DOMツリーから特定の要素を取得するためのメソッドが複数存在する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== querySelector / querySelectorAll ====&lt;br /&gt;
&amp;lt;code&amp;gt;querySelector&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;querySelectorAll&amp;lt;/code&amp;gt; は、CSSセレクタを使用して要素を取得するメソッドである。&amp;lt;br&amp;gt;&lt;br /&gt;
柔軟なセレクタ指定が可能であり、現在最も推奨される取得方法である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;querySelector&amp;lt;/code&amp;gt; は、セレクタに一致する最初の要素を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
一致する要素がない場合は &amp;lt;u&amp;gt;null&amp;lt;/u&amp;gt; を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // IDで取得&lt;br /&gt;
 const header = document.querySelector(&amp;#039;#header&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // クラスで取得&lt;br /&gt;
 const item = document.querySelector(&amp;#039;.item&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 複合セレクタ&lt;br /&gt;
 const input = document.querySelector(&amp;#039;div.form-group input[type=&amp;quot;text&amp;quot;]&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 擬似クラス&lt;br /&gt;
 const firstItem = document.querySelector(&amp;#039;li:first-child&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;querySelectorAll&amp;lt;/code&amp;gt; は、セレクタに一致する全ての要素を静的な &amp;lt;u&amp;gt;NodeList&amp;lt;/u&amp;gt; として返す。&amp;lt;br&amp;gt;&lt;br /&gt;
一致する要素がない場合は空の &amp;lt;u&amp;gt;NodeList&amp;lt;/u&amp;gt; を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 全ての段落を取得&lt;br /&gt;
 const paragraphs = document.querySelectorAll(&amp;#039;p&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 複数セレクタ (カンマ区切り)&lt;br /&gt;
 const elements = document.querySelectorAll(&amp;#039;div.note, div.alert&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // forEachで反復処理&lt;br /&gt;
 paragraphs.forEach(p =&amp;gt; {&lt;br /&gt;
    console.log(p.textContent)&lt;br /&gt;
 })&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;querySelectorAll&amp;lt;/code&amp;gt; が返す &amp;lt;u&amp;gt;NodeList&amp;lt;/u&amp;gt; は静的 (non-live) であり、取得後にDOMが変更されても &amp;lt;u&amp;gt;NodeList&amp;lt;/u&amp;gt; の内容は更新されない。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;forEach&amp;lt;/code&amp;gt; メソッドが使用可能であるため、反復処理が容易である。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== getElementById / getElementsByClassName / getElementsByTagName ====&lt;br /&gt;
これらは従来から存在する要素取得メソッドである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;getElementById&amp;lt;/code&amp;gt; は、指定されたIDに一致する単一の要素を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;document&amp;lt;/code&amp;gt; オブジェクトでのみ使用可能であり、一致する要素がない場合は &amp;lt;u&amp;gt;null&amp;lt;/u&amp;gt; を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.getElementById(&amp;#039;main-content&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;getElementsByClassName&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;getElementsByTagName&amp;lt;/code&amp;gt; は、動的な &amp;lt;u&amp;gt;HTMLCollection&amp;lt;/u&amp;gt; を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // クラス名で取得 (動的HTMLCollection)&lt;br /&gt;
 const items = document.getElementsByClassName(&amp;#039;item&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 複数クラスを指定 (両方を持つ要素のみ)&lt;br /&gt;
 const activeItems = document.getElementsByClassName(&amp;#039;item active&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
 // タグ名で取得 (動的HTMLCollection)&lt;br /&gt;
 const paragraphs = document.getElementsByTagName(&amp;#039;p&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 特定要素の子孫から検索&lt;br /&gt;
 const container = document.getElementById(&amp;#039;container&amp;#039;)&lt;br /&gt;
 const buttons = container.getElementsByTagName(&amp;#039;button&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;動的HTMLCollectionは、DOMの変更に追従して自動的に更新される。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;そのため、反復中にDOMを追加・削除すると無限ループ等の予期しない動作が発生する可能性がある。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;反復処理を行う場合は、&amp;lt;code&amp;gt;Array.from()&amp;lt;/code&amp;gt; で静的なコピーを作成することを推奨する。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 動的HTMLCollectionでの反復は注意が必要&lt;br /&gt;
 const items = document.getElementsByClassName(&amp;#039;item&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // Array.from()で静的コピーを作成して安全に反復&lt;br /&gt;
 Array.from(items).forEach(item =&amp;gt; {&lt;br /&gt;
    // DOM操作を安全に行える&lt;br /&gt;
 })&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 取得メソッドの比較 ====&lt;br /&gt;
各取得メソッドの特性を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 要素取得メソッドの比較&lt;br /&gt;
! メソッド !! 引数 !! 戻り値 !! 動的 / 静的&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;querySelector&amp;lt;/code&amp;gt; || CSSセレクタ || Element / null || -&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;querySelectorAll&amp;lt;/code&amp;gt; || CSSセレクタ || NodeList || 静的&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;getElementById&amp;lt;/code&amp;gt; || ID文字列 || Element / null || -&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;getElementsByClassName&amp;lt;/code&amp;gt; || クラス名 || HTMLCollection || 動的&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;getElementsByTagName&amp;lt;/code&amp;gt; || タグ名 || HTMLCollection || 動的&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;新規開発では &amp;lt;code&amp;gt;querySelector&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;querySelectorAll&amp;lt;/code&amp;gt; の使用を推奨する。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;CSSセレクタによる柔軟な指定が可能であり、静的な &amp;lt;u&amp;gt;NodeList&amp;lt;/u&amp;gt; を返すため安全に操作できる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 要素の作成・追加・削除 ==&lt;br /&gt;
==== 要素の作成 ====&lt;br /&gt;
新しいDOM要素を作成するには、&amp;lt;code&amp;gt;document.createElement&amp;lt;/code&amp;gt; メソッドを使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // 要素の作成&lt;br /&gt;
 const div = document.createElement(&amp;#039;div&amp;#039;)&lt;br /&gt;
 const p = document.createElement(&amp;#039;p&amp;#039;)&lt;br /&gt;
 const a = document.createElement(&amp;#039;a&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 作成した要素に属性やテキストを設定&lt;br /&gt;
 div.id = &amp;#039;new-container&amp;#039;&lt;br /&gt;
 div.className = &amp;#039;container&amp;#039;&lt;br /&gt;
 p.textContent = &amp;#039;新しい段落のテキスト&amp;#039;&lt;br /&gt;
 a.href        = &amp;#039;https://example.com&amp;#039;&lt;br /&gt;
 a.textContent = &amp;#039;リンクテキスト&amp;#039;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
テキストノードを独立して作成する場合は、&amp;lt;code&amp;gt;document.createTextNode&amp;lt;/code&amp;gt; を使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const textNode = document.createTextNode(&amp;#039;テキスト内容&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;createElement&amp;lt;/code&amp;gt; で作成された要素はメモリ上に存在するのみであり、DOMツリーに追加しない限りページ上には表示されない。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 要素の追加 ====&lt;br /&gt;
===== 新しいAPI (append / prepend / before / after) =====&lt;br /&gt;
ES2015以降で追加された新しいAPIでは、複数の引数を受け取り、文字列も直接追加できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 新しい追加メソッド&lt;br /&gt;
! メソッド !! 挿入位置 !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;append()&amp;lt;/code&amp;gt; || 子要素の末尾 || 最後の子要素として追加する&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prepend()&amp;lt;/code&amp;gt; || 子要素の先頭 || 最初の子要素として追加する&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;before()&amp;lt;/code&amp;gt; || 要素の前 || 兄弟要素として前に追加する&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;after()&amp;lt;/code&amp;gt; || 要素の後 || 兄弟要素として後に追加する&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const parent = document.querySelector(&amp;#039;#container&amp;#039;)&lt;br /&gt;
 const newElement = document.createElement(&amp;#039;p&amp;#039;)&lt;br /&gt;
 newElement.textContent = &amp;#039;新しい要素&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 // 最後の子要素として追加&lt;br /&gt;
 parent.append(newElement)&lt;br /&gt;
 &lt;br /&gt;
 // 文字列を直接追加 (自動的にTextNodeに変換)&lt;br /&gt;
 parent.append(&amp;#039;テキスト&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 複数の要素とテキストを一度に追加&lt;br /&gt;
 parent.append(newElement, &amp;#039;テキスト&amp;#039;, document.createElement(&amp;#039;br&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
 // 最初の子要素として追加&lt;br /&gt;
 parent.prepend(newElement)&lt;br /&gt;
 &lt;br /&gt;
 // 兄弟として前後に追加&lt;br /&gt;
 const ref = document.querySelector(&amp;#039;#reference&amp;#039;)&lt;br /&gt;
 ref.before(newElement)&lt;br /&gt;
 ref.after(newElement)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===== 従来のAPI (appendChild / insertBefore) =====&lt;br /&gt;
従来のAPIは &amp;lt;code&amp;gt;Node&amp;lt;/code&amp;gt; オブジェクトのみを引数として受け取る。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const parent = document.querySelector(&amp;#039;#container&amp;#039;)&lt;br /&gt;
 const child = document.createElement(&amp;#039;div&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 最後の子ノードとして追加&lt;br /&gt;
 parent.appendChild(child)&lt;br /&gt;
 &lt;br /&gt;
 // 参照ノードの前に挿入&lt;br /&gt;
 const ref = document.querySelector(&amp;#039;#reference&amp;#039;)&lt;br /&gt;
 parent.insertBefore(child, ref)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
新旧APIの違いを以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 新旧追加APIの比較&lt;br /&gt;
! 項目 !! 新しいAPI (append等) !! 従来のAPI (appendChild等)&lt;br /&gt;
|-&lt;br /&gt;
| 文字列対応 || 可能 (自動的にTextNodeに変換) || Nodeオブジェクトのみ&lt;br /&gt;
|-&lt;br /&gt;
| 複数引数 || 対応 || 単一引数のみ&lt;br /&gt;
|-&lt;br /&gt;
| 戻り値 || &amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; || 追加されたNode&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 要素の削除 ====&lt;br /&gt;
要素をDOMツリーから削除するメソッドを以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // remove() : 要素自身をDOMから削除&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 element.remove()&lt;br /&gt;
 &lt;br /&gt;
 // removeChild() : 子ノードを親から削除 (従来のAPI)&lt;br /&gt;
 const parent = document.querySelector(&amp;#039;#container&amp;#039;)&lt;br /&gt;
 const child  = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 parent.removeChild(child)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; は要素自身を直接削除でき、親要素の参照が不要であるため簡潔に記述できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== DocumentFragment ====&lt;br /&gt;
多数の要素をDOMに追加する場合、1つずつ追加するとその都度ブラウザのリフロー (レイアウト再計算) が発生し、パフォーマンスが低下する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DocumentFragment&amp;lt;/code&amp;gt; を使用することにより、複数の要素をまとめて1回のDOM更新で追加できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const list = document.querySelector(&amp;#039;ul&amp;#039;)&lt;br /&gt;
 const fragment = document.createDocumentFragment()&lt;br /&gt;
 &lt;br /&gt;
 for (let i = 0; i &amp;lt; 1000; i++) {&lt;br /&gt;
    const item = document.createElement(&amp;#039;li&amp;#039;)&lt;br /&gt;
    item.textContent = `Item ${i}`&lt;br /&gt;
    fragment.appendChild(item)  // DocumentFragmentに追加 (リフローなし)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list.appendChild(fragment)  // 1回のDOM更新で全要素を追加&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt; メソッドの複数引数を利用する方法もある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const list = document.querySelector(&amp;#039;ul&amp;#039;)&lt;br /&gt;
 const items = []&lt;br /&gt;
 &lt;br /&gt;
 for (let i = 0; i &amp;lt; 1000; i++) {&lt;br /&gt;
    const item = document.createElement(&amp;#039;li&amp;#039;)&lt;br /&gt;
    item.textContent = `Item ${i}`&lt;br /&gt;
    items.push(item)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list.append(...items)  // スプレッド構文で一度に追加&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== テキスト・HTMLコンテンツの操作 ==&lt;br /&gt;
==== textContent / innerText / innerHTML ====&lt;br /&gt;
要素のテキストやHTMLコンテンツを操作するプロパティが3つ存在する。&amp;lt;br&amp;gt;&lt;br /&gt;
それぞれの特性が異なるため、用途に応じた使い分けが重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ テキスト・HTMLコンテンツ操作プロパティの比較&lt;br /&gt;
! 項目 !! textContent !! innerText !! innerHTML&lt;br /&gt;
|-&lt;br /&gt;
| 用途 || プレーンテキストの取得 / 設定 || 表示テキストの取得 / 設定 || HTMLマークアップの取得/設定&lt;br /&gt;
|-&lt;br /&gt;
| 非表示要素の扱い || 取得する || 取得しない (CSSを考慮) || HTMLとして取得する&lt;br /&gt;
|-&lt;br /&gt;
| script / style要素 || テキストとして取得する || 取得しない || HTMLとして取得する&lt;br /&gt;
|-&lt;br /&gt;
| XSSリスク || 安全 || 安全 || 危険&lt;br /&gt;
|-&lt;br /&gt;
| パフォーマンス || 高速 || 低速 (CSSレイアウト計算が必要) || HTMLパーサーの呼び出しが必要&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#content&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // textContent: プレーンテキストとして取得 / 設定&lt;br /&gt;
 const text = element.textContent&lt;br /&gt;
 element.textContent = &amp;#039;新しいテキスト&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 // innerText: 表示されているテキストのみ取得 / 設定&lt;br /&gt;
 const visibleText = element.innerText&lt;br /&gt;
 &lt;br /&gt;
 // innerHTML: HTMLマークアップを含めて取得 / 設定&lt;br /&gt;
 const html = element.innerHTML&lt;br /&gt;
 element.innerHTML = &amp;#039;&amp;lt;p&amp;gt;新しい&amp;lt;strong&amp;gt;HTML&amp;lt;/strong&amp;gt;コンテンツ&amp;lt;/p&amp;gt;&amp;#039;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; を設定すると、要素の全ての子ノードが削除され、単一のテキストノードに置き換わる。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;innerHTML&amp;lt;/code&amp;gt; はXSS (クロスサイトスクリプティング) 攻撃の脆弱性となるため、ユーザ入力を含む文字列を設定してはならない。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;テキストの設定には、&amp;lt;code&amp;gt;textContent&amp;lt;/code&amp;gt; を使用すること。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // ユーザ入力をinnerHTMLに設定するのは危険&lt;br /&gt;
 const userInput = &amp;#039;&amp;lt;img src=&amp;quot;x&amp;quot; onerror=&amp;quot;alert(\&amp;#039;XSS\&amp;#039;)&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
 element.innerHTML = userInput  // スクリプトが実行される&lt;br /&gt;
 &lt;br /&gt;
 // textContentを使用すればプレーンテキストとして安全に設定される&lt;br /&gt;
 element.textContent = userInput  // そのまま文字列として表示される&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== insertAdjacentHTML ====&lt;br /&gt;
&amp;lt;code&amp;gt;insertAdjacentHTML&amp;lt;/code&amp;gt; は、指定したHTML文字列をDOMツリーの指定位置に挿入するメソッドである。&amp;lt;br&amp;gt;&lt;br /&gt;
既存の要素を破壊せずにHTMLを挿入できるため、&amp;lt;u&amp;gt;innerHTML&amp;lt;/u&amp;gt; による再設定より効率的である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4つの挿入ポジションを以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ insertAdjacentHTMLのポジション&lt;br /&gt;
! ポジション !! 挿入位置&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;beforebegin&amp;lt;/code&amp;gt; || 要素自身の直前 (兄弟として)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;afterbegin&amp;lt;/code&amp;gt; || 要素の先頭 (最初の子要素の前)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;beforeend&amp;lt;/code&amp;gt; || 要素の末尾 (最後の子要素の後)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;afterend&amp;lt;/code&amp;gt; || 要素自身の直後 (兄弟として)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!-- beforebegin --&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
    &amp;lt;!-- afterbegin --&amp;gt;&lt;br /&gt;
    content&lt;br /&gt;
    &amp;lt;!-- beforeend --&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;!-- afterend --&amp;gt;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 element.insertAdjacentHTML(&amp;#039;beforebegin&amp;#039;, &amp;#039;&amp;lt;div&amp;gt;要素の前&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
 element.insertAdjacentHTML(&amp;#039;afterbegin&amp;#039;, &amp;#039;&amp;lt;span&amp;gt;先頭に挿入&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
 element.insertAdjacentHTML(&amp;#039;beforeend&amp;#039;, &amp;#039;&amp;lt;span&amp;gt;末尾に挿入&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
 element.insertAdjacentHTML(&amp;#039;afterend&amp;#039;, &amp;#039;&amp;lt;div&amp;gt;要素の後&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;insertAdjacentHTML&amp;lt;/code&amp;gt; もHTMLを解析するため、ユーザ入力の挿入にはXSSのリスクがある。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;プレーンテキストの挿入には &amp;lt;code&amp;gt;insertAdjacentText&amp;lt;/code&amp;gt; を使用すること。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 属性操作 ==&lt;br /&gt;
==== 標準的な属性操作 ====&lt;br /&gt;
下表に、要素の属性を操作する基本的なメソッドを示す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 属性操作メソッド&lt;br /&gt;
! メソッド !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;getAttribute(name)&amp;lt;/code&amp;gt; || 指定した属性の値を文字列で取得する。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;setAttribute(name, value)&amp;lt;/code&amp;gt; || 属性を設定する。(存在しない場合は新規作成)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hasAttribute(name)&amp;lt;/code&amp;gt; || 属性が存在するかを &amp;lt;u&amp;gt;boolean&amp;lt;/u&amp;gt; で返す。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;removeAttribute(name)&amp;lt;/code&amp;gt; || 属性を削除する。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const link = document.querySelector(&amp;#039;a&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 属性の取得&lt;br /&gt;
 const href = link.getAttribute(&amp;#039;href&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 属性の設定&lt;br /&gt;
 link.setAttribute(&amp;#039;href&amp;#039;, &amp;#039;https://example.com&amp;#039;)&lt;br /&gt;
 link.setAttribute(&amp;#039;target&amp;#039;, &amp;#039;_blank&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 属性の存在確認&lt;br /&gt;
 if (link.hasAttribute(&amp;#039;target&amp;#039;)) {&lt;br /&gt;
    console.log(&amp;#039;target属性が存在する&amp;#039;)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // 属性の削除&lt;br /&gt;
 link.removeAttribute(&amp;#039;target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // boolean属性 (disabled, readonly等) の設定&lt;br /&gt;
 const button = document.querySelector(&amp;#039;button&amp;#039;)&lt;br /&gt;
 button.setAttribute(&amp;#039;disabled&amp;#039;, &amp;#039;&amp;#039;)  // 無効化&lt;br /&gt;
 button.removeAttribute(&amp;#039;disabled&amp;#039;)   // 有効化&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== data属性 (dataset) ====&lt;br /&gt;
HTML5の &amp;lt;code&amp;gt;data-*&amp;lt;/code&amp;gt; カスタムデータ属性は、&amp;lt;code&amp;gt;dataset&amp;lt;/code&amp;gt; プロパティを使用してアクセスする。&amp;lt;br&amp;gt;&lt;br /&gt;
属性名は、ケバブケースからキャメルケースに自動変換される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ケバブケース と キャメルケースの比較&lt;br /&gt;
! 項目 !! ケバブケース (kebab-case) !! キャメルケース (camelCase / PascalCase)&lt;br /&gt;
|-&lt;br /&gt;
! 区切り文字 &lt;br /&gt;
| ハイフン `-` || なし（大文字で区切る）&lt;br /&gt;
|-&lt;br /&gt;
! 先頭文字 &lt;br /&gt;
| 小文字 || 小文字（lowerCamelCase）または大文字（UpperCamelCase / PascalCase）&lt;br /&gt;
|-&lt;br /&gt;
! 記述例 &lt;br /&gt;
| `my-variable-name` || `myVariableName` / `MyVariableName`&lt;br /&gt;
|-&lt;br /&gt;
! 主な用途 &lt;br /&gt;
| CSS クラス名・ID、URL スラッグ、HTML 属性、ファイル名 || 変数名・関数名（Java, C#, JavaScript 等）、クラス名（PascalCase）&lt;br /&gt;
|-&lt;br /&gt;
! 言語・環境の例 &lt;br /&gt;
| HTML, CSS, Lisp 系, REST API のエンドポイント || C#, Java, JavaScript, TypeScript, Swift&lt;br /&gt;
|-&lt;br /&gt;
! 大文字・小文字の区別 &lt;br /&gt;
| 全て小文字が基本 || 単語の先頭を大文字にする。&lt;br /&gt;
|-&lt;br /&gt;
! スペースの代替 &lt;br /&gt;
| ハイフンがスペース相当 || 大文字がスペース相当&lt;br /&gt;
|-&lt;br /&gt;
! 視認性 &lt;br /&gt;
| ハイフンにより単語の区切りが明確 || 慣れるまで単語の区切りが読みにくい場合がある。&lt;br /&gt;
|-&lt;br /&gt;
! URLでの使用 &lt;br /&gt;
| 使用可能（推奨） || 非推奨（大文字が小文字に正規化される場合がある）&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div id=&amp;quot;user&amp;quot; data-user-id=&amp;quot;123&amp;quot; data-user-name=&amp;quot;John&amp;quot; data-date-of-birth=&amp;quot;1990-01-01&amp;quot;&amp;gt;&lt;br /&gt;
    John&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const el = document.querySelector(&amp;#039;#user&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 読み取り (ケバブケース → キャメルケース)&lt;br /&gt;
 console.log(el.dataset.userId)       // &amp;quot;123&amp;quot;        (data-user-id)&lt;br /&gt;
 console.log(el.dataset.userName)     // &amp;quot;John&amp;quot;       (data-user-name)&lt;br /&gt;
 console.log(el.dataset.dateOfBirth)  // &amp;quot;1990-01-01&amp;quot; (data-date-of-birth)&lt;br /&gt;
 &lt;br /&gt;
 // 設定&lt;br /&gt;
 el.dataset.role = &amp;#039;admin&amp;#039;            // data-role=&amp;quot;admin&amp;quot; が追加される&lt;br /&gt;
 &lt;br /&gt;
 // 削除&lt;br /&gt;
 delete el.dataset.dateOfBirth&lt;br /&gt;
 &lt;br /&gt;
 // 存在確認&lt;br /&gt;
 if (&amp;#039;userId&amp;#039; in el.dataset) {&lt;br /&gt;
    console.log(&amp;#039;userId属性が存在する&amp;#039;)&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ data属性の名前変換規則&lt;br /&gt;
! HTML属性名 !! JavaScriptプロパティ名&lt;br /&gt;
|-&lt;br /&gt;
| data-id || dataset.id&lt;br /&gt;
|-&lt;br /&gt;
| data-user-name || dataset.userName&lt;br /&gt;
|-&lt;br /&gt;
| data-date-of-birth || dataset.dateOfBirth&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== クラス操作 (classList) ====&lt;br /&gt;
&amp;lt;code&amp;gt;classList&amp;lt;/code&amp;gt; プロパティは、要素のCSSクラスを操作するためのメソッドを提供する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ classListのメソッド&lt;br /&gt;
! メソッド !! 説明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;add(class1, class2, ...)&amp;lt;/code&amp;gt; || 1つ以上のクラスを追加する。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;remove(class1, class2, ...)&amp;lt;/code&amp;gt; || 1つ以上のクラスを削除する。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;toggle(class)&amp;lt;/code&amp;gt; || クラスが存在すれば削除し、存在しなければ追加する。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;toggle(class, force)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;force&amp;lt;/code&amp;gt; が &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; なら追加、&amp;lt;u&amp;gt;false&amp;lt;/u&amp;gt; なら削除する。&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;contains(class)&amp;lt;/code&amp;gt; || クラスが存在するかを &amp;lt;u&amp;gt;boolean&amp;lt;/u&amp;gt; で返す&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;replace(oldClass, newClass)&amp;lt;/code&amp;gt; || クラスを別のクラスに置換する&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // クラスの追加&lt;br /&gt;
 element.classList.add(&amp;#039;active&amp;#039;)&lt;br /&gt;
 element.classList.add(&amp;#039;highlight&amp;#039;, &amp;#039;visible&amp;#039;)  // 複数クラスを一度に追加&lt;br /&gt;
 &lt;br /&gt;
 // クラスの削除&lt;br /&gt;
 element.classList.remove(&amp;#039;active&amp;#039;)&lt;br /&gt;
 element.classList.remove(&amp;#039;highlight&amp;#039;, &amp;#039;visible&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // クラスのトグル&lt;br /&gt;
 element.classList.toggle(&amp;#039;active&amp;#039;)             // 追加 / 削除を切り替え&lt;br /&gt;
 element.classList.toggle(&amp;#039;active&amp;#039;, isActive)   // 条件に基づいて追加 / 削除&lt;br /&gt;
 &lt;br /&gt;
 // クラスの存在確認&lt;br /&gt;
 if (element.classList.contains(&amp;#039;active&amp;#039;)) {&lt;br /&gt;
    console.log(&amp;#039;activeクラスが存在する&amp;#039;)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // クラスの置換&lt;br /&gt;
 element.classList.replace(&amp;#039;old-class&amp;#039;, &amp;#039;new-class&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== スタイル操作 ====&lt;br /&gt;
要素のスタイルを操作する方法として、&amp;lt;code&amp;gt;element.style&amp;lt;/code&amp;gt; プロパティと &amp;lt;code&amp;gt;getComputedStyle&amp;lt;/code&amp;gt; 関数がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;element.style&amp;lt;/code&amp;gt; はインラインスタイル (&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; 属性) のみを操作する。&amp;lt;br&amp;gt;&lt;br /&gt;
CSSプロパティ名はケバブケースからキャメルケースに変換して使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // スタイルの設定 (ケバブケース -&amp;gt; キャメルケース)&lt;br /&gt;
 element.style.color = &amp;#039;blue&amp;#039;&lt;br /&gt;
 element.style.fontSize = &amp;#039;18px&amp;#039;            // font-size&lt;br /&gt;
 element.style.backgroundColor = &amp;#039;#f0f0f0&amp;#039;  // background-color&lt;br /&gt;
 element.style.borderTopWidth = &amp;#039;2px&amp;#039;       // border-top-width&lt;br /&gt;
 &lt;br /&gt;
 // スタイルの削除 (空文字列を設定)&lt;br /&gt;
 element.style.color = &amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;getComputedStyle&amp;lt;/code&amp;gt; は、外部スタイルシートを含む全てのCSSプロパティの計算済み値を取得する読み取り専用の関数である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 const styles = window.getComputedStyle(element)&lt;br /&gt;
 &lt;br /&gt;
 // 計算済みスタイルの取得&lt;br /&gt;
 const fontSize = styles.getPropertyValue(&amp;#039;font-size&amp;#039;)&lt;br /&gt;
 const color = styles.getPropertyValue(&amp;#039;color&amp;#039;)&lt;br /&gt;
 console.log(fontSize)  // &amp;quot;16px&amp;quot; (外部CSSも含めた実際の値)&lt;br /&gt;
 &lt;br /&gt;
 // 擬似要素のスタイル取得&lt;br /&gt;
 const afterStyles = window.getComputedStyle(element, &amp;#039;::after&amp;#039;)&lt;br /&gt;
 const content = afterStyles.getPropertyValue(&amp;#039;content&amp;#039;)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ element.style と getComputedStyle の比較&lt;br /&gt;
! 項目 !! element.style !! getComputedStyle()&lt;br /&gt;
|-&lt;br /&gt;
| 対象範囲 || インラインスタイルのみ || 全てのCSSプロパティ (外部スタイル含む)&lt;br /&gt;
|-&lt;br /&gt;
| 読み書き || 読み書き可能 || 読み取り専用&lt;br /&gt;
|-&lt;br /&gt;
| 値の種類 || インラインスタイルの値 || Webブラウザが計算した最終的な値&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;視覚的なスタイル変更は &amp;lt;code&amp;gt;classList&amp;lt;/code&amp;gt; によるCSSクラスの切り替えが推奨される。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;code&amp;gt;element.style&amp;lt;/code&amp;gt; は動的に計算が必要な値 (アニメーションの座標等) の設定に適している。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOM走査 ==&lt;br /&gt;
==== 親・子・兄弟要素のアクセス ====&lt;br /&gt;
DOMツリーを移動するためのプロパティとして、Element系とNode系の2種類がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Element系はHTML要素ノードのみを対象とし、Node系はテキストノードやコメントノードを含む全てのノードを対象とする。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DOM走査プロパティの比較&lt;br /&gt;
! 操作 !! Element系 (要素のみ) !! Node系 (全ノード)&lt;br /&gt;
|-&lt;br /&gt;
| 親 || parentElement || parentNode&lt;br /&gt;
|-&lt;br /&gt;
| 子 (コレクション) || children (HTMLCollection) || childNodes (NodeList)&lt;br /&gt;
|-&lt;br /&gt;
| 最初の子 || firstElementChild || firstChild&lt;br /&gt;
|-&lt;br /&gt;
| 最後の子 || lastElementChild || lastChild&lt;br /&gt;
|-&lt;br /&gt;
| 次の兄弟 || nextElementSibling || nextSibling&lt;br /&gt;
|-&lt;br /&gt;
| 前の兄弟 || previousElementSibling || previousSibling&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 const element = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 // 親要素&lt;br /&gt;
 const parent = element.parentElement&lt;br /&gt;
 &lt;br /&gt;
 // 子要素&lt;br /&gt;
 const children = element.children             // HTMLCollection (要素のみ)&lt;br /&gt;
 const firstChild = element.firstElementChild  // 最初の子要素&lt;br /&gt;
 const lastChild = element.lastElementChild    // 最後の子要素&lt;br /&gt;
 &lt;br /&gt;
 // 兄弟要素&lt;br /&gt;
 const next = element.nextElementSibling            // 次の兄弟要素&lt;br /&gt;
 const prev = element.previousElementSibling        // 前の兄弟要素&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;HTML内の改行やスペースはテキストノードとして解析されるため、Node系のプロパティ (&amp;lt;code&amp;gt;firstChild&amp;lt;/code&amp;gt; 等) では予期しないテキストノードが取得される場合がある。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;通常は、Element系のプロパティ (&amp;lt;code&amp;gt;firstElementChild&amp;lt;/code&amp;gt; 等) の使用を推奨する。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== closest ====&lt;br /&gt;
&amp;lt;code&amp;gt;closest&amp;lt;/code&amp;gt; メソッドは、指定したCSSセレクタに一致する最も近い祖先要素 (またはその要素自身) を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
要素自身から始まり、DOMツリーを上方向に走査する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
一致する要素がない場合は &amp;lt;u&amp;gt;null&amp;lt;/u&amp;gt; を返す。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // HTML : &amp;lt;article&amp;gt; &amp;gt; &amp;lt;div id=&amp;quot;outer&amp;quot;&amp;gt; &amp;gt; &amp;lt;div id=&amp;quot;inner&amp;quot;&amp;gt; &amp;gt; &amp;lt;p id=&amp;quot;target&amp;quot;&amp;gt;&lt;br /&gt;
 const target = document.querySelector(&amp;#039;#target&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 target.closest(&amp;#039;div&amp;#039;)        // &amp;lt;div id=&amp;quot;inner&amp;quot;&amp;gt; (最も近いdiv)&lt;br /&gt;
 target.closest(&amp;#039;#outer&amp;#039;)     // &amp;lt;div id=&amp;quot;outer&amp;quot;&amp;gt;&lt;br /&gt;
 target.closest(&amp;#039;article&amp;#039;)    // &amp;lt;article&amp;gt;&lt;br /&gt;
 target.closest(&amp;#039;section&amp;#039;)    // null (一致なし)&lt;br /&gt;
 target.closest(&amp;#039;:not(div)&amp;#039;)  // &amp;lt;article&amp;gt; (divでない最も近い祖先)&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;closest&amp;lt;/code&amp;gt; はイベント委譲 (Event Delegation) で頻繁に使用されるメソッドである。&amp;lt;br&amp;gt;&lt;br /&gt;
イベント委譲の詳細については[[JavaScriptの基礎 - イベント(DOM)]]を参照すること。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 // イベント委譲での典型的なclosestの使用例&lt;br /&gt;
 document.addEventListener(&amp;#039;click&amp;#039;, event =&amp;gt; {&lt;br /&gt;
    const button = event.target.closest(&amp;#039;button&amp;#039;)&lt;br /&gt;
    if (button) {&lt;br /&gt;
       // ボタンまたはその子要素がクリックされた場合の処理&lt;br /&gt;
       console.log(button.dataset.action)&lt;br /&gt;
    }&lt;br /&gt;
 })&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReactがDOMを直接操作しない理由 ==&lt;br /&gt;
React等のモダンフレームワークでは、開発者がDOMを直接操作することは原則としてない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
この方針には、いくつかの重要な理由がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 仮想DOM ====&lt;br /&gt;
Reactは仮想DOMと呼ばれる仕組みを採用している。&amp;lt;br&amp;gt;&lt;br /&gt;
仮想DOMはDOMの軽量なインメモリ表現であり、実際のDOM操作の前に変更差分を計算して、最小限の実DOM更新のみを実行する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
この仕組みにより、開発者は &amp;lt;u&amp;gt;UIがどのような状態であるべきか&amp;lt;/u&amp;gt; を宣言的に記述するだけでよく、実際のDOM操作はReactが最適化して処理する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 命令型と宣言型の対比 ====&lt;br /&gt;
直接DOM操作は命令型のアプローチである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;何をどのように変更するか&amp;lt;/u&amp;gt; をステップごとに記述する必要があり、状態が増えるほどUIとの同期が複雑化する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
一方、Reactは宣言型のアプローチを採用しており、&amp;lt;u&amp;gt;この状態のときにUIはこうあるべき&amp;lt;/u&amp;gt; と記述する。&amp;lt;br&amp;gt;&lt;br /&gt;
状態が変化すると、Reactが自動的にDOMの差分を計算して更新する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 直接DOM操作の問題点 ====&lt;br /&gt;
大規模なアプリケーションで直接DOM操作を行う場合、以下に示すような問題が発生しやすい。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* 状態の不整合&lt;br /&gt;
*: JavaScriptの変数が保持する状態とUIの表示が乖離するリスクがある。&lt;br /&gt;
*: 複数箇所からDOMを操作すると、整合性の維持が困難になる。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* パフォーマンスの非効率性&lt;br /&gt;
*: 不必要なDOM操作やリフロー・リペイントの増加が発生しやすい。&lt;br /&gt;
*: 個々の操作では最適化が困難である。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* 保守性の低下&lt;br /&gt;
*: 状態変更とUI更新の関連性が把握しにくくなる。&lt;br /&gt;
*: コードの複雑化に伴い、バグが増加する傾向がある。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、React開発においても &amp;lt;code&amp;gt;ref&amp;lt;/code&amp;gt; を使用して直接DOM要素にアクセスする場面 (フォーカス管理、スクロール制御、外部ライブラリとの統合等) は存在する。&amp;lt;br&amp;gt;&lt;br /&gt;
そのため、DOMの基本操作を理解しておくことは重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 関連情報 ==&lt;br /&gt;
* [[JavaScriptの基礎 - イベント(DOM)]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Web]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>