ãã¯ã¤ãã¹ãã¼ã¹ã®å¦ç
DOM ã«ãã¯ã¤ãã¹ãã¼ã¹ãåå¨ããã¨ãã¬ã¤ã¢ã¦ãã®åé¡ãçºçãããããã¯ã¤ãã¹ãã¼ã¹ãããå ´æã«ãã£ã¦ã¯ãäºæãã¬å½¢ã§ã³ã³ãã³ãããªã¼ã®æä½ãå°é£ã«ãªã£ãããããã¨ãããã¾ãããã®è¨äºã§ã¯ãã©ã®ãããªå ´åã«åé¡ãçºçããããæ¢ãããã®çµæçããåé¡ã軽æ¸ããããã«ä½ãã§ããããè¦ã¦ããã¾ãã
ãã¯ã¤ãã¹ãã¼ã¹ã¨ã¯
ãã¯ã¤ãã¹ãã¼ã¹æåã¯ãããã°ã©ãã³ã°è¨èªã®ã³ã³ããã¹ãã«ãã£ã¦ãæ§æããæåãç°ãªãã¾ããææ¸ã®ãã¯ã¤ãã¹ãã¼ã¹æåã«ããã¨ãCSS ã®ãã¯ã¤ãã¹ãã¼ã¹å¦çã«ã¼ã«ã«ããã¦ã¯ãç©ºç½ (U+0020)ãã¿ã (U+0009)ãè¡éã (LFãU+000A)ããã£ãªãã¸ãªã¿ã¼ã³ (CRãU+000D) ã®ã¿ã対象ã«ãªãã¾ããããã§ãCR æåã¯ããããç¹ã§ç©ºç½ã¨åçã§ãããããã®æåã使ç¨ãããã¨ã§ãèªåãä»ã®äººãèªã¿ãããããã«ã³ã¼ããæ´å½¢ãããã¨ãã§ãã¾ããå®éãç§ãã¡ã®ã½ã¼ã¹ã³ã¼ãã®å¤ãã¯ãããã®ãã¯ã¤ãã¹ãã¼ã¹ã§ããµãã¦ãããã³ã¼ãã®ãã¦ã³ãã¼ããµã¤ãºãæ¸ããããã«ãæ¬çªã®ãã«ã段éã§ãã¯ã¤ãã¹ãã¼ã¹ãåãé¤ãå¾åãããã¾ãã
ãªãããã®ãªã¹ãã«ã¯ãéæ¹è¡ç©ºç½ (U+00A0ãHTML ã§ã¯ ) ã¯å«ã¾ãã¦ãã¾ããããããã£ã¦ããããã®æåã¯çµ±åãå¼ãèµ·ããããHTML ã§é·ã空ç½ã使ããå ´åã«å¤ã使ç¨ããã¾ãã
CSS ã§ã¯ãã»ã°ã¡ã³ãåºåãã¨ããæ¦å¿µãå®ç¾©ãã¦ãã¾ããããã¯ãHTML ã®ã³ã³ããã¹ãã§ã¯ LF æåã¨åçã§ãã
HTML ã®ãã¯ã¤ãã¹ãã¼ã¹ã®å¦çæ¹æ³
ãHTML ã¯ãã¯ã¤ãã¹ãã¼ã¹ãç¡è¦ãããã¨ããè¨ããã¾ãããããã¯äºå®ã§ã¯ããã¾ãããHTML ã¯ãã½ã¼ã¹ã³ã¼ãã§è¨è¿°ããã¨ããã«ããã¹ã¦ã®ãã¯ã¤ãã¹ãã¼ã¹ã®ããã¹ãã³ã³ãã³ããä¿åãã¾ãã ãã¼ã¯ã¢ããè¨èªã§ãã HTML 㯠DOM ã使ããã¨ããããã¹ãã³ã³ãã³ãå
ã®ãã¹ã¦ã®ãã¯ã¤ãã¹ãã¼ã¹ãä¿åãã¾ãããã® DOM ã¯ãNode.textContent ãªã©ã® DOM API ã使ç¨ãã¦åå¾ããã³æä½ãããã¨ãã§ãã¾ãããã HTML ã DOM ãããã¯ã¤ãã¹ãã¼ã¹ãåé¤ãã¦ãã¾ãã¨ãDOM ä¸ã§åä½ãã䏿µã®ã¬ã³ããªã³ã°ã¨ã³ã¸ã³ã§ãã CSS ã¯ãwhite-space ããããã£ã使ç¨ãã¦ãã®ã¾ã¾æ®ããã¨ãã§ããªããªãã¾ãã
ã¡ã¢: æ£ç¢ºã«ã¯ãããã§ã¯ HTML ã¿ã°éã®ãã¯ã¤ãã¹ãã¼ã¹ã«ã¤ãã¦è©±ãã¦ãã¾ãããã㯠DOM ã§ã¯ããã¹ããã¼ãã«ãªãã¾ããã¿ã°å ã®ãã¯ã¤ãã¹ãã¼ã¹ï¼å±±æ¬å¼§ã®éã«ãããã屿§å¤ã®ä¸é¨ã§ã¯ãªããã®ï¼ã¯ã HTML æ§æã®ä¸é¨ã§ãããDOM ã«ã¯ç¾ãã¾ããã
ã¡ã¢:
HTML ã®æ§æè§£æã®ç¹æ§ï¼DOM 仿§æ¸ããï¼ã«ããããã¯ã¤ãã¹ãã¼ã¹æåãç¡è¦ãããå ´æãããã¾ããä¾ãã°ã<html> 㨠<head> ã®éå§ã¿ã°ã®éãã¾ã㯠</body> 㨠</html> ã®çµäºã¿ã°ã®éã®ãã¯ã¤ãã¹ãã¼ã¹ã¯ç¡è¦ãããDOM ã«ã¯è¡¨ç¤ºããã¾ãããã¾ãã<pre> è¦ç´ ã®ããã¹ãã³ã³ãã³ããæ§æè§£æããå ´åãå
é ã«æ¹è¡æåããã㨠1 ã¤åé¤ããã¾ããããã§ã¯ããããã®ä¾å¤ã¯ç¡è¦ãã¦ãã¾ãã
ããã«ã HTML ãã¼ãµã¼ã¯ç¹å®ã®ãã¯ã¤ãã¹ãã¼ã¹ãæ£è¦åãã¾ãã CR ããã³ CRLF ã®ä¸¦ã³ãåä¸ã® LF ã«ç½®ãæãã¾ãããã ãã CR æåã¯ãæååç §ã¾ã㯠JavaScript ã«ãã£ã¦ DOM ã«æ¿å ¥ããããã¨ãããããã CSS ã®ãã¯ã¤ãã¹ãã¼ã¹å¦çã«ã¼ã«ã§ã¯ãããããã©ã®ããã«å¦çããããå®ç¾©ãã¦ããå¿ è¦ãããã¾ãã
ä¾ãã°ãæ¬¡ã®ææ¸ãè¦ã¦ãã ããã
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>My Document</title>
</head>
<body>
<h1>Header</h1>
<p>Paragraph</p>
</body>
</html>
ãã® DOM ããªã¼ã¯æ¬¡ã®ããã«è¦ãã¾ãã

以ä¸ã®ç¹ã«æ³¨æãã¦ãã ããã
- ãã¯ã¤ãã¹ãã¼ã¹ã®ã¿ãå«ã¾ããããã¹ããã¼ããããã¾ãã
- ä»ã®ããã¹ããã¼ãã¯ãå é ã¾ãã¯æ«å°¾ã«ãã¯ã¤ãã¹ãã¼ã¹ãä¿æãããã¨ãããã¾ãã
ã¡ã¢: [Firefox éçºè ãã¼ã«] (https://firefox-source-docs.mozilla.org/devtools-user/index.html) ã¯ãããã¹ããã¼ãã®å¼·èª¿è¡¨ç¤ºã«å¯¾å¿ãã¦ããããã¯ã¤ãã¹ãã¼ã¹æåãå«ã¾ãã¦ãããã¼ãã確èªã§ãã¾ããç´ç²ãªãã¯ã¤ãã¹ãã¼ã¹ãã¼ãã«ã¯ "whitespace" ã¨ããã©ãã«ãä»ãã¦ãã¾ãã
DOM å ã§ãã¯ã¤ãã¹ãã¼ã¹æåãä¿åãããã¨ã¯ããã¾ãã¾ãªç¹ã§æç¨ã§ãããä¸é¨ã®ã¬ã¤ã¢ã¦ãã®å®è£ ãé£ãããªã£ãããDOM ãã¼ããå復å¦çãããéçºè ã«åé¡ãå¼ãèµ·ããããããå¯è½æ§ãããã¾ãããããã®èª²é¡ã¨ããã®è§£æ±ºçã«ã¤ãã¦ã¯ãå¾ã§ãã¯ã¤ãã¹ãã¼ã¹ãã¼ãã«é¢ããä¸è¬çãªåé¡ã®è§£æ±ºã®ç¯ã§è¦ã¦ããã¾ãã
CSS ã®ãã¯ã¤ãã¹ãã¼ã¹ã®å¦çæ¹æ³
DOM ãã¬ã³ããªã³ã°ã®ããã« CSS ã«æ¸¡ãããã¨ãæ¢å®ã§ã¯ãã¯ã¤ãã¹ãã¼ã¹ã¯å¤§é¨åãåé¤ããã¾ããã¤ã¾ããã³ã¼ãã®æ¸å¼åæ¹æ³ã¯ã¦ã¼ã¶ã¼ã«ã¯è¦ãã¾ãããè¦ç´ ã®å¨å²ãå é¨ã«ç©ºéã使ããã®ã¯ãCSS ã®ä»äºã§ãã
<!doctype html>
<h1> Hello World! </h1>
ãã®ã½ã¼ã¹ã³ã¼ãã«ã¯ã doctype ã®å¾ã« 2 ã¤ã®æ¹è¡ã¨ <h1> è¦ç´ ã®åå¾ã¨å
é¨ã«ãã¯ã¤ãã¹ãã¼ã¹ã®æãå«ã¾ãã¦ãã¾ãããããããã©ã¦ã¶ã¼ã¯ãããã®ãã¯ã¤ãã¹ãã¼ã¹ãç¡è¦ãã¦ããããã®æåãå
¨ãåå¨ããªããã®ããã« "Hello World!" ã¨ããè¨èã表示ãã¦ãã¾ãã
ã»ã¨ãã©ã®ãã¯ã¤ãã¹ãã¼ã¹ã¯ç¡è¦ããã¾ããããã¹ã¦ãç¡è¦ãããããã§ã¯ããã¾ãããå ã»ã©ã®ä¾ã§ã¯ã "Hello" 㨠"World!" ã®éã®ãã¯ã¤ãã¹ãã¼ã¹ã®ä¸ã¤ã¯ããã©ã¦ã¶ã¼ã§ãã¼ã¸ãã¬ã³ããªã³ã°ãããã¨ãã«ã¾ã åå¨ãã¦ãã¾ãã CSS ã¯ãç¹å®ã®ã¢ã«ã´ãªãºã ã使ç¨ãã¦ãã¦ã¼ã¶ã¼ã«ã¯ç¡é¢ä¿ãªãã¯ã¤ãã¹ãã¼ã¹æåã夿ããããããé¤å»ã¾ãã¯å¤æããæ¹æ³ã決å®ãã¾ãããã®å¦çãã©ã®ããã«åä½ããã®ãã«ã¤ãã¦ã¯ã次ã®ããã¤ãã®ç¯ã§èª¬æãã¾ãã
çµ±åã¨å¤æ
ä¾ãè¦ã¦ã¿ã¾ããããåãããããããã«ãã³ã¡ã³ãã®ä¸ã§ãã¹ã¦ã®ç©ºç½ã ⦠ã§ããã¹ã¦ã®ã¿ãã ⥠ã§ããã¹ã¦ã®æ¹è¡ã â ã§è¡¨ç¾ãã¾ãã
<h1> Hello
<span> World!</span> </h1>
<!--
<h1>â¦â¦â¦Helloâ¦â
â¥â¥â¥â¥<span>â¦World!</span>â¥â¦â¦</h1>
-->
ããã¯ãã©ã¦ã¶ã¼ã§æ¬¡ã®ããã«ã¬ã³ããªã³ã°ããã¾ãã
<h1> è¦ç´ ã«ã¯æ¬¡ã®ãã®ãå«ã¾ãã¦ãã¾ãã
- 1 ã¤ã®ããã¹ããã¼ãï¼ããã¤ãã®ç©ºç½ã "Hello" ã¨ããèªãããã¤ãã®ã¿ãããæãï¼
- 1 ã¤ã®ã¤ã³ã©ã¤ã³è¦ç´ ï¼
<span>ã§ãä¸ã«ç©ºç½ã¨ "World!" ã¨ããèªãå«ãï¼ - ãã 1 ã¤ã®ããã¹ããã¼ãï¼
<span>ã®å¾ã®ã¿ãã¨ç©ºç½ã®ã¿ããæãï¼
ãã® <h1> è¦ç´ ã«ã¯ã¤ã³ã©ã¤ã³è¦ç´ ããå«ã¾ãã¦ããªããããã¤ã³ã©ã¤ã³æ´å½¢ã³ã³ããã¹ãã確ç«ãã¾ããããã¯ããã©ã¦ã¶ã¼ã¨ã³ã¸ã³ã使¥ãè¡ãåå¨ããå¯è½æ§ã®ããã¬ã¤ã¢ã¦ãã¬ã³ããªã³ã°ã³ã³ããã¹ãã®ä¸ã¤ã§ãã
ãã®ã³ã³ããã¹ãã®ä¸ã§ã¯ããã¯ã¤ãã¹ãã¼ã¹æåã®å¦çã¯æ¬¡ã®ããã«è¦ç´ããã¾ãã
ã¡ã¢:
ãã®ã¢ã«ã´ãªãºã ã¯ã white-space-collapse ãããã㣠(ã¾ãã¯ãã®ä¸æ¬æå®ãããã㣠white-space) ã§æ§æãããå¯è½æ§ãããã¾ããã¾ãããã®æ¢å®å¤ (white-space-collapse: collapse) ãæ³å®ãã¦ããã¾ãã¾ãªããããã£å¤ããã®ã¢ã«ã´ãªãºã ã«ã©ã®ããã«å½±é¿ããããè¦ã¦ããã¾ãã
-
ã¾ããæ¹è¡ã®ç´åã¨ç´å¾ã®ç©ºç½ã¨ã¿ãã¯ãã¹ã¦ç¡è¦ãããã®ã§ã以åã®ãã¼ã¯ã¢ããã®ä¾ãåèã«ããã¨ã次ã®ããã«ãªãã¾ãã
html<h1>â¦â¦â¦Helloâ¦â â¥â¥â¥â¥<span>â¦World!</span>â¥â¦â¦</h1>...ããã¦æåã®ã«ã¼ã«ãé©ç¨ããã¨ã次ã®ããã«ãªãã¾ãã
html<h1>â¦â¦â¦Helloâ <span>â¦World!</span>â¥â¦â¦</h1> -
次ã«ãé£ç¶ããæ¹è¡ã¯åä¸ã®æ¹è¡ã«çµ±åããã¾ãããã®ä¾ã§ã¯ããã®ãããªæ¹è¡ã¯åå¨ãã¾ããã
-
次ã«ãã½ã¼ã¹ã³ã¼ãå ã®è¡ã¯ãæ®ã£ã¦ããæ¹è¡æåãé¤å»ããã¦åä¸ã®è¡ã«çµåããã¾ããæ¹è¡æåã¯ããã®åå¾ã®ã³ã³ããã¹ãã«å¿ãã¦ãç©ºç½ (U+0020) ã«å¤æãããããåã«é¤å»ããã¾ããã©ã¡ãã鏿ããããã¯ããã©ã¦ã¶ã¼ãè¨èªã«ãã£ã¦ç°ãªãã¾ãããã®ä¾ã§ã¯ãè±èªï¼åèªã¯ç©ºç½ã§åºåãããï¼ã使ç¨ãã¦ããããããã¹ã¦ã®æ¹è¡ã¯ç©ºç½ã«ã夿ãããããã¨ãäºæ³ããã¾ãããã®çµæã次ã®ãããªçµæã«ãªãã¾ãã
html<h1>â¦â¦â¦Helloâ¦<span>â¦World!</span>â¥â¦â¦</h1>ãªããä¸å½èªã®ããã«åèªã®åºåãæåãåå¨ããªãè¨èªã§ã¯ãè¡ã¯ç©ºç½ãå«ã¾ãã«çµåããã¾ãããããã£ã¦ã
html<div>ä½ å¥½ ä¸ç</div>ããã¯ããã©ã¦ã¶ã¼ã®çµé¨åã«ãã£ã¦ã¯ãéã®ç©ºç½ããã¹ã¦åé¤ããã¦ãä½ å¥½ä¸çãã¨è¡¨ç¤ºãããå ´åãããã¾ãã
-
次ã«ããã¹ã¦ã®ã¿ãæåãç©ºç½æåã«å¤æãããããããã®ä¾ã¯æ¬¡ã®ããã«ãªãã¾ãã
html<h1>â¦â¦â¦Helloâ¦<span>â¦World!</span>â¦â¦â¦</h1> -
ãã®å¾ã§ã空ç½ã®ç´å¾ã«ä»ã®ç©ºç½ãããå ´åã¯ï¼2 ã¤ãå¥ã ãªã¤ã³ã©ã¤ã³è¦ç´ ãã¾ããå ´åãå«ãã¦ï¼ç¡è¦ãããã®ã§ã次ã®ããã«ãªãã¾ãã
html<h1>â¦Helloâ¦<span>World!</span>â¦</h1>
ãã®ãããã¦ã§ããã¼ã¸ã訪ãã人ã¯ãã²ã©ãåä¸ãããã "Hello" ã«ç¶ãã¦ãã£ã¨ã²ã©ãåä¸ãããã "World!" ããã®ä¸ã®è¡ã«è¦ãããã®ã§ã¯ãªãããã¼ã¸ã®å é ã«ãããã«æ¸ããã "Hello World!" ã¨ããæè¨ãè¦ããã¨ã«ãªãã¾ãã
ãããã®æé ã®å¾ããã©ã¦ã¶ã¼ã¯è¡ã®æãè¿ãã¨åæ¹åããã¹ããå¦çãã¾ãããããã§ã¯ç¡è¦ãã¾ããéå§ã¿ã° <h1> ã®å¾ã¨çµäºã¿ã° </h1> ã®åã«ã¾ã 空ç½ãæ®ã£ã¦ãããã¨ã«æ³¨æãã¦ãã ããããããã¯ãã©ã¦ã¶ã¼ã§ã¯è¡¨ç¤ºããã¾ãããããããã®è¡ã®ã¬ã¤ã¢ã¦ããè¡ãæ¬¡ã®æ®µéã§ããããå¦çãã¾ãã
white-space-collapse ã®å¤ãç°ãªãå ´åããã®ã¢ã«ã´ãªãºã ã®ãã¾ãã¾ãªæ®µéãçç¥ããã¾ãã
preserveããã³break-spaces: ã¢ã«ã´ãªãºã å ¨ä½ãã¹ãããããããã¯ã¤ãã¹ãã¼ã¹ã®çµ±åã夿ã¯è¡ããã¾ãããpreserve-breaks: 段é 2 ããã³ 3 ãçç¥ãããæ¹è¡ãä¿æããã¾ããpreserve-spaces: ã¢ã«ã´ãªãºã å ¨ä½ãçç¥ãããããããã®ã¿ãã¾ãã¯æ¹è¡ã空ç½ã«å¤æããå䏿®µéã§ç½®ãæãããã¾ãã
ç°¡åã«è¨ãã°ããã¾ãã¾ãªãã¯ã¤ãã¹ãã¼ã¹æåã¯ãæ¬¡ã®æ¹æ³ã§çµ±åããã³å¤æããã¾ãã
- ã¿ãã¯é常ã空ç½ã«å¤æããã¾ãã
- ã»ã°ã¡ã³ãåºåããçµ±åããå ´å:
- ã»ã°ã¡ã³ãåºåãã¯ãåä¸ã®ã»ã°ã¡ã³ãåºåãã«çµ±åããã¾ãã
- ãããã¯ãåèªã空ç½ã§åºåãè¨èªï¼è±èªãªã©ï¼ã§ã¯ç©ºç½ã«å¤æãããåèªã空ç½ã§åºåããªãè¨èªï¼ä¸å½èªãªã©ï¼ã§ã¯å®å ¨ã«é¤å»ããã¾ãã
- 空ç½ãçµ±åããå ´å:
- ã»ã°ã¡ã³ãåºåãåã®ç©ºç½ãã¿ãã¯é¤å»ããã¾ãã
- é£ç¶ãã空ç½ã¯åä¸ã®ç©ºç½ã«çµ±åããã¾ãã
- 空ç½ãä¿æãããå ´åãä¸é£ã®ç©ºç½ã¯æ¹è¡ãããªãæ±ãã«ãªãã¾ãããããããã®ä¸¦ã³ã®çµããã§ã¯ã½ããæ¹è¡ããã¾ããã¤ã¾ããæ¬¡ã®è¡ã¯å¸¸ã«æ¬¡ã®ç©ºç½æå以å¤ã®æåã§å§ã¾ãã¾ãããã ãã
break-spacesã®å¤ã®å ´åãå空ç½ã®å¾ã«ã½ããæ¹è¡ãçºçããå¯è½æ§ããããããæ¬¡ã®è¡ã¯ 1 ã¤ä»¥ä¸ã®ç©ºç½ã§å§ã¾ãå ´åãããã¾ãã
ããªãã³ã°ã¨ä½ç½®æå®
ã¤ã³ã©ã¤ã³ããã³ãããã¯ã®ä¸¡æ¹ã®æ´å½¢ã³ã³ããã¹ãã§ã¯ãè¦ç´ ã¯ è¡ ã§ã¬ã¤ã¢ã¦ãããã¾ããã¤ã³ã©ã¤ã³æ´å½¢ã³ã³ããã¹ãã§ã¯ãè¡ã¯ããã¹ãã®æãè¿ãã«ãã£ã¦ä½æããã¾ãã䏿¹ããããã¯æ´å½¢ã³ã³ããã¹ãã§ã¯ãããããã®ãããã¯ãèªåèªèº«ã§è¡ãå½¢æãã¾ããããããã®è¡ãã¬ã¤ã¢ã¦ããããã«ã¤ãã¦ã空ç½ãããã«å¦çããã¾ãããããã©ã®ããã«åä½ããã®ããä¾ãè¦ã¦ã¿ã¾ãããã
ãã®ä¾ã§ã¯ãåã¨åãããã«ãã¯ã¤ãã¹ãã¼ã¹æåããã¼ã¯ãããã¨æãã¾ããããã«ã¯ãã¯ã¤ãã¹ãã¼ã¹ã®ã¿ãå«ã 3 ã¤ã®ããã¹ããã¼ããããã¾ãã <div> ã®åã« 1 ã¤ã 2 ã¤ã® <div> ã®éã« 1 ã¤ã 2 ã¤ç®ã® <div> ã®å¾ã« 1 ã¤ã§ãã
<body>
<div> Hello </div>
<div> World! </div>
</body>
<!--
<body>â
â¥<div>â¥Helloâ¥</div>â
â
â¦â¦â¦<div>â¦â¦World!â¦â¦</div>â¦â¦â
</body>
-->
ããã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ãã®ä¾ã§ã¯ããã¯ã¤ãã¹ãã¼ã¹ã¯æ¬¡ã®ããã«å¦çããã¾ãã
ã¡ã¢:
ãã®ã¢ã«ã´ãªãºã ã¯ãwhite-space-collapse ããããã£ï¼ã¾ãã¯ãã®ä¸æ¬æå®ãããã㣠white-spaceï¼ã§æ§æã§ãã¾ããã¾ãããã®æ¢å®å¤ï¼white-space-collapse: collapseï¼ãä»®å®ãã¦ããã¾ãã¾ãªããããã£å¤ããã®ã¢ã«ã´ãªãºã ã«ã©ã®ããã«å½±é¿ããããã¿ã¦ããã¾ãã
-
ã¾ãããã¯ã¤ãã¹ãã¼ã¹ã¯ãååã¨åãæ¹æ³ã§çµ±åããã¾ããããã«ããã
html<body>â â¥<div>â¥Helloâ¥</div>â â â¦â¦â¦<div>â¦â¦World!â¦â¦</div>â¦â¦â </body>...ããã¯æ¬¡ã®ããã«ãªãã¾ãã
html<body>â¦<div>â¦Helloâ¦</div>â¦<div>â¦World!â¦</div>â¦</body>è¡ã¯ã
<body>ã«ãã£ã¦ç¢ºç«ããããããã¯æ´å½¢ã³ã³ããã¹ãã«å¾ã£ã¦ã¬ã¤ã¢ã¦ãããã¾ãããã®ä¾ã§ã¯ã<body>ã® 5 ã¤ã®åãã¼ãã¯ããããå¥åã®è¡ã¨ãã¦ã¬ã¤ã¢ã¦ãããã¾ããï¼ãã®ã³ã¼ããããã¯ã®åè¡ã¯ãã¬ã³ããªã³ã°ãããã¬ã¤ã¢ã¦ãã®è¡ã表ãã¦ãããå ã® HTML ã³ã¼ãã®è¡ã表ãã¦ããããã§ã¯ããã¾ããï¼ãhtml<body> ⦠<div>â¦Helloâ¦</div> ⦠<div>â¦World!â¦</div> ⦠</body>è¡ãé·ããªããããã¨ãããããã®è¡ãæãè¿ãã¦è¤æ°ã®è¡ã使ãããå ´åããããã¨ã«æ³¨æãã¦ãã ãããå®éã«ã¯ããã©ã¦ã¶ã¼ã¯ãè¡ãã¬ã¤ã¢ã¦ããããéã«ãã®è¡ã®ã³ã³ãã³ããæ±ºå®ãã¾ããããã¹ãã®æãè¿ãã®åä½ã«ã¤ãã¦ã¯ããã§ã¯çç¥ãã¾ãã
-
ããã¦ããããã®ãããã¯ã«ã¤ã³ã©ã¤ã³æ´å½¢ã³ã³ããã¹ãã«ããããã¯ã¤ãã¹ãã¼ã¹ã®å¦çã«ã¼ã«ãé©ç¨ãããã¨ã§ãããã«ç°¡ç´ åããã¾ãã
html<body> <div>Helloâ¦</div> <div>World!â¦</div> </body> -
ãã®æç¹ã§ä¿æããã¦ããããããã®ã¿ãã¯ã
tab-sizeã«å¿ãã¦ã¬ã³ããªã³ã°ããã¾ããããã¯ãwhite-space-collapseãpreserveã¾ãã¯break-spacesã«è¨å®ããã¦ããå ´åã«ã®ã¿ç¾ãã¾ãããã以å¤ã®è¨å®ã§ã¯ãã¿ãã¯ãã¹ã¦ç©ºç½ã«å¤æãããããã§ãã -
è¡ã®æ«å°¾ã®ç©ºç½ã¯é¤å»ããããããä¸è¨ã®ãã®ã¯æ¬¡ã®ããã«å¤æ´ããã¾ãã
html<body> <div>Hello</div> <div>World!</div> </body>
ã§ãã 3 ã¤ã®ç©ºã®ãããã¯ã¯ãæçµçãªã¬ã¤ã¢ã¦ãã§ã¯ä½ãå«ã¾ããªãã®ã§ããã¼ã¸å
ã®ç©ºéãå æãããããã¯ã¯ 2 ã¤ã ãã«ãªãã¾ãããã®ã¦ã§ããã¼ã¸ãè¦ã人ã«ã¯ã "Hello" 㨠"World!" ã¨ããè¨èãã 2 ã¤ã®å¥ã
ã®è¡ã«ããããã«è¦ãã¾ãããã㯠2 ã¤ã® <div> ã並ã¹ãããå ´åã®æå¾
éãã§ãããã©ã¦ã¶ã¼ã¨ã³ã¸ã³ã¯ãã½ã¼ã¹ã³ã¼ãã«è¿½å ããããã¹ã¦ã®ç©ºç½ãåºæ¬çã«ç¡è¦ãã¦ãã¾ãã
Different white-space-collapse ã®åå¤ã«ãã£ã¦ããã®ã¢ã«ã´ãªãºã ã®ãã¾ãã¾ãªæ®µéãçç¥ããã¾ãã
preserveããã³break-spaces: 段é 3 ãé¤ãã¢ã«ã´ãªãºã å ¨ä½ãçç¥ãããããããã¯ã¤ãã¹ãã¼ã¹ã®çµ±åã夿ã¯è¡ããã¾ãããpreserve-spaces: ã¢ã«ã´ãªãºã å ¨ä½ãã¹ãããããããããè¡ã®å é ã¨æ«å°¾ã®ãã¯ã¤ãã¹ãã¼ã¹æåãä¿æããã¾ããpreserve-breaks:collapseå¤ã«å¯¾å¿ããã¢ã«ã´ãªãºã ãé©ç¨ããã¾ãã
DOM API ã®ãã¯ã¤ãã¹ãã¼ã¹ã®å¦çæ¹æ³
ååè¿°ã¹ãããã«ããã¯ã¤ãã¹ãã¼ã¹ã¯ DOM å
ã§ä¿æããã¾ããã¤ã¾ãã Node.textContent ãåå¾ããã¨ã HTML ã½ã¼ã¹ã³ã¼ãã§è¨è¿°ããã¨ããã«ããã¹ãã³ã³ãã³ããåå¾ããã Node.childNodes ãåå¾ããã¨ããã¯ã¤ãã¹ãã¼ã¹ã®ã¿ãå«ããã®ãå«ãããã¹ã¦ã®ããã¹ããã¼ããåå¾ããã¾ãã
ãã¹ã¦ã® DOM API ããã¯ã¤ãã¹ãã¼ã¹ãä¿æããããã§ã¯ããã¾ãããä¸é¨ã® API ã¯ãè¨è¨ä¸ãã¬ã³ããªã³ã°ãããããã¹ããæ±ãã¾ããä¾ãã°ã HTMLElement.innerText ã¯ããã¹ã¦ã®ãã¯ã¤ãã¹ãã¼ã¹ãçµ±åããã¦ããªãã³ã°ãããã¬ã³ããªã³ã°ãããã¨ããã®ããã¹ããè¿ãã¾ãã Selection.toString() ã¯ãè²¼ãä»ããããã¨ããã®ããã¹ããè¿ãã¾ããããã¯ãé常ããã¯ã¤ãã¹ãã¼ã¹ãçµ±åãããã¨ãããã¨ã§ãããã ãã Firefox ã§ã¯ï¼ä¸è¨ã® ãã¯ã¤ãã¹ãã¼ã¹ã®çµ±åã¨å¤æã§è¿°ã¹ãããã«ãæ¼¢åéã®ãã¯ã¤ãã¹ãã¼ã¹ã¯çµ±åããã¾ãï¼ãæãããã¾ãããã¯ã¤ãã¹ãã¼ã¹ã¯ãtoString() ã«ãã£ã¦è¿ãããæååã¨è²¼ãä»ããããããã¹ãã®ä¸¡æ¹ã§ä¿æããã¾ãã
<div id="test">Hello world!</div>
const div = document.getElementById("test");
console.log(div.textContent); // " Hello\n world!\n"
console.log(div.innerText); // "Hello world!"
const selection = document.getSelection();
selection.selectAllChildren(div);
console.log(selection.toString()); // "Hello world!"
ãã¯ã¤ãã¹ãã¼ã¹ãã¼ãã«é¢ããä¸è¬çãªåé¡ã®è§£æ±º
ãã¯ã¤ãã¹ãã¼ã¹ãã¼ãã¯ãCSS ã®å¦çã«ã¼ã«ã«ãããã¦ã§ããµã¤ãã®æ¥è¨ªè ã«ã¯è¦ãã¾ãããããããDOM ã®æ£ç¢ºãªæ§é ã«ä¾åããç¹å®ã®ã¬ã¤ã¢ã¦ãã DOM æä½ã«å¹²æ¸ããå¯è½æ§ãããã¾ããããããåé¡ã¨ããã®è§£æ±ºæ¹æ³ãè¦ã¦ããã¾ãããã
ã¤ã³ã©ã¤ã³è¦ç´ ãã¤ã³ã©ã¤ã³ãããã¯è¦ç´ éã®ãã¯ã¤ãã¹ãã¼ã¹
ãã¯ã¤ãã¹ãã¼ã¹ãã¼ãã«é¢ããã¬ã¤ã¢ã¦ãã®èª²é¡ã® 1 ã¤ãã¤ã³ã©ã¤ã³è¦ç´ ã¨ã¤ã³ã©ã¤ã³ãããã¯è¦ç´ éã®ç©ºç½ãè¦ã¦ã¿ã¾ããããã¤ã³ã©ã¤ã³è¦ç´ ã¨ãããã¯è¦ç´ ã§åè¿°ããããã«ãã»ã¨ãã©ã®ãã¯ã¤ãã¹ãã¼ã¹æåã¯ç¡è¦ããã¾ããã空ç½ã¨åæ§ã«åèªãåºåãæåã¯æ®ãã¾ããã¬ã¤ã¢ã¦ãã«æ®ãä½åãªãã¯ã¤ãã¹ãã¼ã¹ã¯ãæä¸ã®åèªãåºåãã®ã«å½¹ç«ã¡ã¾ãã
inline-block è¦ç´ ã使ç¨ããã¨ãããã«è峿·±ãçµæã«ãªãã¾ãããããã®è¦ç´ ã¯ãå¤å´ã¯ã¤ã³ã©ã¤ã³è¦ç´ ã®ããã«ãå
å´ã¯ãããã¯ã®ããã«åä½ãã¾ããï¼ãããã¯ãããã²ã¼ã·ã§ã³ã¡ãã¥ã¼ã®ã¢ã¤ãã ãªã©ãåãè¡ã«æ¨ªã«ä¸¦ãã§ããè¤é㪠UI è¦ç´ ã表示ããããã«å¤ã使ç¨ããã¾ãã飿¥ããã¤ã³ã©ã¤ã³è¦ç´ ã¾ãã¯ã¤ã³ã©ã¤ã³ãããã¯è¦ç´ éã®ãã¯ã¤ãã¹ãã¼ã¹ã¯ãããã¹ãå
ã®åèªéã®ã¹ãã¼ã¹ã¨åæ§ã«ãã¬ã¤ã¢ã¦ãã«ç©ºç½ã¨ãã¦è¡¨ç¤ºããã¾ããï¼ãããã¯ãããã¯ã§ãããããé常ãä½åãªã¹ãã¼ã¹ã¯è¡¨ç¤ºãããªããããéçºè
ã¯é©ãããããã¾ãããï¼
ãã®ä¾ãè¦ã¦ã¿ã¦ãã ããï¼ãã¡ãã HTML ã®ã³ã¡ã³ãã®ä¸ã§ HTML ã®ãã¯ã¤ãã¹ãã¼ã¹æåã示ãã¦ãã¾ãï¼ã
.people-list {
list-style-type: none;
margin: 0;
padding: 0;
}
.people-list li {
display: inline-block;
width: 2em;
height: 2em;
background: #ff0066;
border: 1px solid;
}
<ul class="people-list">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<!--
<ul class="people-list">â
â¦â¦<li></li>â
â
â¦â¦<li></li>â
â
â¦â¦<li></li>â
â
â¦â¦<li></li>â
â
â¦â¦<li></li>â
</ul>
-->
ããã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ããããããããã¯éã®ééã¯æã¾ãããªãã§ããããç¨éï¼ã¢ãã¿ã¼ã®ä¸è¦§ã横ä¸åã®ããã²ã¼ã·ã§ã³ãã¿ã³ãªã©ï¼ã«ãã£ã¦ã¯ãè¦ç´ ãäºãã«æãã¦ãééãèªåã§å¶å¾¡ã§ããæ¹ãæã¾ããã§ãããã
Firefox éçºè ãã¼ã«ã® HTML ã¤ã³ã¹ãã¯ã¿ã¼ã§ã¯ãããã¹ããã¼ãã強調表示ããè¦ç´ ãå ãã¦ããé åãæ£ç¢ºã«è¡¨ç¤ºãããã¨ãã§ãã¾ããããã¯ãä½åãªãã¼ã¸ã³ãäºæããªã空ç½ã«ãã£ã¦ééãçºçãã¦ããçããããå ´åã«ãããã確èªããã®ã«å½¹ç«ã¡ã¾ãã

ãã®åé¡ãåé¿ããæ¹æ³ã¯ä½éããããã¾ãã
-
æ°´å¹³æ¹åã®ã¢ã¤ãã ã®ãªã¹ããçæããã®ã«ã
inline-blockã«ãã解決æ³ããããã¬ãã¯ã¹ããã¯ã¹ã使ç¨ãã¾ããããã¯ãããªãã«ä»£ãã£ã¦ãã¹ã¦ãå¦çãããã®ã§ãééããªãæã¾ãã解決çã§ããcssul { list-style-type: none; margin: 0; padding: 0; display: flex; } -
inline-blockã«é ¼ãå¿ è¦ãããã®ã§ããã°ããã®ãªã¹ãã®font-sizeã0ã«ãã¦ãã ãããããã¯ããããã¯ã®ãµã¤ãºãemã§è¨å®ããã¦ããªãå ´åã®ã¿æå¹ã§ãï¼ãããã¯ã®ãµã¤ãºãfont-sizeã«åºã¥ãã¦ããã®ã§ãçµå±0ã«ãªã£ã¦ãã¾ãã¾ãï¼ãããã§ã¯remã使ç¨ããã¨ããã§ããããcssul { font-size: 0; /* ⦠*/ } li { display: inline-block; width: 2rem; height: 2rem; /* ⦠*/ } -
ã¾ãã¯ããªã¹ãã¢ã¤ãã ã«è² ã®ãã¼ã¸ã³ãè¨å®ããæ¹æ³ãããã¾ãã
cssli { display: inline-block; width: 2rem; height: 2rem; margin-right: -0.25rem; } -
ãã®åé¡ã¯ããªã¹ãã¢ã¤ãã ããã¹ã¦ã½ã¼ã¹ã®åãè¡ã«é ç½®ãã空ç½ã®ãã¼ããæåã«ä½æãããªãããã«ãããã¨ã§è§£æ±ºãããã¨ãã§ãã¾ãã
html<li> ... </li><li> ... </li>
DOM ã§ã®ãã¯ã¤ãã¹ãã¼ã¹ã®å¦ç
åè¿°ã®ããã«ããã¯ã¤ãã¹ãã¼ã¹ã¯ã¬ã³ããªã³ã°æã«çµ±åããã¦ããªãã³ã°ããã¾ãããDOM ã§ã¯ä¿æããã¾ãã DOM ã JavaScript ã§æä½ãããã¨ããã¨ãããã¯ã¤ãã¹ãã¼ã¹ã®ãã¼ãã«èµ·å ããåé¡ã«ééããå¯è½æ§ãããã¾ããä¾ãã°ã親ãã¼ãã¸ã®åç
§ãæã£ã¦ã㦠Node.firstChild ã使ç¨ãã¦å
é ã®åè¦ç´ ãèµ°æ»ãããã¨ããå ´åã親è¦ç´ ã®éå§ã¿ã°ã®ç´å¾ã«ä¸æ£ãªãã¯ã¤ãã¹ãã¼ã¹ãããã¨ãäºæããªãçµæã«ãªãã¾ãããã®ããã¹ããã¼ããèµ°æ»ãããè¦ç´ ã®ä»£ããã«é¸æããã¦ãã¾ãããã§ãã
å¥ã®ä¾ã¨ãã¦ãããè¦ç´ ã®ãµãã»ãããããããããã空ã§ãããã©ããï¼åãã¼ãããªããã©ããï¼ã夿ãã¦ä½ãããããå ´åã Node.hasChildNodes() ãªã©ã使ç¨ãã¦ããããã®è¦ç´ ã空ã§ãããã確èªãããã¨ãã§ãã¾ããããã¯ã対象ã®è¦ç´ ãããã¹ããã¼ããå«ãã§ããã°ã誤ã£ãçµæã«ãªã£ã¦ãã¾ãå¯è½æ§ãããã¾ãã
以ä¸ã® JavaScript ã®ã³ã¼ãã§ã¯ã DOM å ã®ç©ºç½ãç°¡åã«å¦çããããã®ããã¤ãã®é¢æ°ãå®ç¾©ãã¦ãã¾ãã
/**
* ã¹ã¯ãªããå
¨ä½ã§ããã¯ã¤ãã¹ãã¼ã¹ã以ä¸ã®ããããã®æåã¨ãã¦å®ç¾©ãã¦ãã¾ãã
* "\t" TAB \u0009
* "\n" LF \u000A
* "\r" CR \u000D
* " " SPC \u0020
*
* JavaScript ã® \s ã¯éæ¹è¡ç©ºç½ (ããã³ä»ã®ããã¤ãã®æå) ãå«ãã§ããçº
* ãã®ã¹ã¯ãªããã§ã¯ä½¿ç¨ãã¾ããã
*/
/**
* ãã¼ãã®ããã¹ãå
容ãå®å
¨ã«ç©ºç½ã§ããã夿
*
* @param nod `CharacterData` ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãããã¼ã
* ï¼ããªãã¡ `Text`, `Comment`, `CDATASection` ãã¼ãï¼
* @return `nod` ã®ããã¹ãå
容ããã¹ã¦ãã¯ã¤ãã¹ãã¼ã¹ã§ããã° `true`
* ãã以å¤ã¯ `false`
*/
function isAllWs(nod) {
return !/[^\t\n\r ]/.test(nod.textContent);
}
/**
* å復å¦ç颿°ããã¼ããç¡è¦ããã¹ããã©ãã夿
*
* @param nod DOM1 ã® `Node` ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãããã¼ã
* @return ãã¼ããæ¬¡ã®ããããã§ããã° `true`
* 1) ãã¹ã¦ãã¯ã¤ãã¹ãã¼ã¹ã§ãã `Text` ãã¼ã
* 2) `Comment` ãã¼ã
* ãã以å¤ã¯ `false`
*/
function isIgnorable(nod) {
return (
nod.nodeType === 8 || // ã³ã¡ã³ããã¼ã
(nod.nodeType === 3 && isAllWs(nod))
); // å
¨ã¦ãã¯ã¤ãã¹ãã¼ã¹ã®ããã¹ããã¼ã
}
/**
* å®å
¨ã«ç©ºç½ãããã¯ã³ã¡ã³ãã®ãã¼ããç¡è¦ããããã«ãã `previousSibling`
* (é常 `previousSibling` ã¯ãã¹ã¦ã® DOM ãã¼ããæã¤ããããã£ã®ãã¨ã§ã親ã
* åãã§åç
§ãã¼ãã®ç´åã«ããå
å¼ãã¼ãã表ãã¾ã)
*
* @param sib åç
§ãã¼ã
* @return `sib` ã«æãè¿ãåã®å
å¼ãã¼ãã§ã
* `isIgnorable` æ¤æ»ã§ç¡è¦ã§ããªãã¨å¤æããããã®ã
* ã¾ãã¯è©²å½ãããã¼ãããªããã° `null`
*/
function nodeBefore(sib) {
while ((sib = sib.previousSibling)) {
if (!isIgnorable(sib)) {
return sib;
}
}
return null;
}
/**
* å®å
¨ã«ç©ºç½ãããã¯ã³ã¡ã³ãã®ãã¼ããç¡è¦ããããã«ãã `nextSibling`
*
* @param sib åç
§ãã¼ã
* @return `sib` ã«æãè¿ã次ã®å
å¼ãã¼ãã§ã
* `isIgnorable` æ¤æ»ã§ç¡è¦ã§ããªãã¨å¤æããããã®ã
* ã¾ãã¯è©²å½ãããã¼ãããªããã° `null`
*/
function nodeAfter(sib) {
while ((sib = sib.nextSibling)) {
if (!isIgnorable(sib)) {
return sib;
}
}
return null;
}
/**
* å®å
¨ã«ç©ºç½ãããã¯ã³ã¡ã³ãã®ãã¼ããç¡è¦ããããã«ãã lastChild
* (é常 lastChild ã¯ãã¹ã¦ã® DOM ãã¼ããæã¤ããããã£ã®ãã¨ã§ãåç
§ãã¼ãã«
* ç´æ¥å«ã¾ããæå¾ã®ãã¼ãã表ãã¾ã)
*
* @param sib åç
§ãã¼ã
* @return `sib` ã®æå¾ã®åãã¼ãã§ã
* `isIgnorable` æ¤æ»ã§ç¡è¦ã§ããªãã¨å¤æããããã®ã
* ã¾ãã¯è©²å½ãããã¼ãããªããã° `null`
*/
function lastChild(par) {
let res = par.lastChild;
while (res) {
if (!isIgnorable(res)) {
return res;
}
res = res.previousSibling;
}
return null;
}
/**
* å®å
¨ã«ç©ºç½ãããã¯ã³ã¡ã³ãã®ãã¼ããç¡è¦ããããã«ãã `firstChild`
*
* @param sib åç
§ãã¼ã
* @return `sib` ã®æåã®åãã¼ãã§ã
* `isIgnorable` æ¤æ»ã§ç¡è¦ã§ããªãã¨å¤æããããã®ã
* ã¾ãã¯è©²å½ãããã¼ãããªããã° `null`
*/
function firstChild(par) {
let res = par.firstChild;
while (res) {
if (!isIgnorable(res)) {
return res;
}
res = res.nextSibling;
}
return null;
}
/**
* å
é ã¨æ«å°¾ã«ç©ºç½ãå«ã¾ãããã¹ã¦ã®ç©ºç½ãåä¸ã®ç©ºç½ã«æ£è¦åãã
* `data` ã®ãã¼ã¸ã§ã³ãï¼é常ã`data` ã¯ããã¼ãã®ããã¹ããä»ä¸ãã
* ããã¹ããã¼ãã®ããããã£ã§ããï¼
*
* @param txt data ãè¿ãããã¹ãããã¹ããã¼ã
* @return å½è©²ããã¹ããã¼ãã®å
容ãä¸ãããã¯ã¤ãã¹ãã¼ã¹ãçºããæåå
*/
function dataOf(txt) {
let data = txt.textContent;
data = data.replace(/[\t\n\r ]+/g, " ");
if (data[0] === " ") {
data = data.substring(1, data.length);
}
if (data[data.length - 1] === " ") {
data = data.substring(0, data.length - 1);
}
return data;
}
次ã®ã³ã¼ãã¯ãä¸è¨ã®é¢æ°ã®ä½¿ãæ¹ã示ãããã®ã§ããããã¯ãããè¦ç´ ã®åï¼ãã®åã¯ãã¹ã¦è¦ç´ ï¼ãç¹°ãè¿ããããã¹ãã "ãã㯠3 çªç®ã®æ®µè½ã§ãã" ã§ãããã®ãè¦ã¤ãã class 屿§ã¨ãã®æ®µè½ã®å
容ã夿´ãããã®ã§ãã
let cur = firstChild(document.getElementById("test"));
while (cur) {
if (dataOf(cur.firstChild) === "ãã㯠3 çªç®ã®æ®µè½ã§ãã") {
cur.className = "magic";
cur.firstChild.textContent = "ãã㯠magic ã®æ®µè½ã§ãã";
}
cur = nodeAfter(cur);
}