DOM

1. DOM์ด๋ž€?

  • The Document Object Model(๋ฌธ์„œ๊ฐ์ฒด๋ชจ๋ธ) ์˜ ์•ฝ์ž๋กœ, html, xml์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•œ๋‹ค.

    ๋ฌธ์„œ ๊ฐ์ฒด๋ž€? html, xml์„ Java Script๊ฐ€ ์ธ์‹ / ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋งŒ๋“ ๊ฒƒ.

  • ์‰ฝ๊ฒŒ ๋งํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ์ธ์‹ํ•˜๋Š” ๋ฐฉ์‹

  • DOM์€ tree๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ , ์ด๊ฒƒ์„ DOM Tree ๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ๋ฌธ์ €๋ฅผ ์ธ์‹ / ์ด์šฉํ• ์ˆ˜ ์žˆ๋„๋ก Tree ๊ตฌ์กฐ์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๋งŒ๋“  ๊ฒƒ์„ DOM์ด๋ผ ํ•œ๋‹ค.

๊ฐ„๋‹จํ•œ html์„ ํ†ตํ•˜์—ฌ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž.

<html>
    <head>
        <meta charset = "UTF-8"/>
        <title/>
    <head/>
    <body>
        <div>
            <h1>~~~<h1/>
            <p>xxx<p/>
        <div/>
        <div>
            <ul>
                <li>1. ~~<li/>
                <li>2. xx<li/>
            <ul/>
        <div/>
    <body/>
<html/>

์œ„ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์˜ html ๊ตฌ์กฐ๋Œ€๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” DOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ Treeํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ธ์‹ / ์ด์šฉํ• ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

์œ„ ํŠธ๋ฆฌ๊ตฌ์กฐ์—์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ node๋ผ ํ•œ๋‹ค.

2. DOM์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • html์€ ์ •์ ์ธ ์ปจํ…์ธ ์ด๋‹ค.

    • ๋ง ๊ทธ๋Œ€๋กœ html์€ ์ •์ ์ธ ์ปจํ…์ธ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ž™์…˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

      • ๋”ฐ๋ผ์„œ, Java Script๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ž™์…˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์„ DOM์ด ๋‹ด๋‹นํ•œ๋‹ค.

        JJava Script์˜ Event => DOM์— ํ•ด๋‹น Event ๋ฐ˜์˜ => ๋ธŒ๋ผ์šฐ์ € ๋ฆฌ๋ Œ๋”๋ง

      • ์š”์•ฝํ•˜์ž๋ฉด, ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

3. ์œ ์˜์ 

  • DOM !== html

    • html๋ฌธ์„œ์— ์˜ํ•ด DOM์ด ์ƒ์„ฑ๋˜์ง€๋งŒ, html๊ณผ DOM์€ ์™„์ „ํžˆ ๊ฐ™์ง€ ์•Š๊ณ , ์ด๊ฒƒ์— ๋Œ€ํ•œ 2๊ฐ€์ง€ ๋Œ€ํ‘œ ์ผ€์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

      1. ์ž‘์„ฑ๋œ ์›๋ณธ html์ด ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

        • ์ด ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋™์œผ๋กœ html๋ฌธ์„œ๋ฅผ ์ˆ˜์ •(๊ต์ •ํ•œ๋‹ค)

        ์›๋ณธ html ๋ฌธ์„œ
        <html>
        	Case 1
        <html/>
        ์ƒ์„ฑ๋œ DOM tree ๊ตฌ์กฐ
        <html>
        	<head><head/>
            <body>
            	Case 1
            <body/>
        <html/>
        • ๋ Œ๋”๋ง ๋œ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์„ ๋ณด์•˜์„๋•Œ, ์œ„ 2๊ฐœ์˜ ์ฝ”๋“œ๋Š” ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ์›๋ณธ html๋ฌธ์„œ์— ์—†๋Š” head, bodyํƒœ๊ทธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ˆ˜์ •ํ•˜์—ฌ DOM Tree์— ๋ฐ˜์˜๋œ๋‹ค.

      2. Java Script์— ์˜ํ•œ DOM ์ˆ˜์ •

        • ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, ์‚ฌ์šฉ์ž์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ„์˜ ์ธํ„ฐ๋ž™์…˜์„ ์œ„ํ•ด DOM์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, DOM์˜ ๋™์  ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด๊ณ , ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์›๋ณธ html๊ณผ DOM Tree๋Š” ๋‹ฌ๋ผ์ง„๋‹ค.

        ** Example for Case 2 **
        
        var case2 = document.createElement("div");
        var case2_text = document.createTextNode("This is Test");
        case2.appendChild(case2_text);
        document.body.appendChild(case2);
        
        • ์œ„ ์ฝ”๋“œ๋Š” 2๋ฒˆ์งธ ์˜ˆ์‹œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. case2๋ผ๋Š” ๋ณ€์ˆ˜๋Š” document์— div ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , case2_text๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์ƒ์„ฑ๋œ div ํƒœ๊ทธ ์•ˆ์— "This is Test"๋ผ๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ดํ›„ ์ตœ์ข…์ ์œผ๋กœ document์— case2๋ผ๋Š” ๋ณ€์ˆ˜, ์ฆ‰ div ํƒœ๊ทธ ์•ˆ ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

        • Java Script๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ html๋ฌธ์„œ๋ฅผ ๋™์ ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€๊ณ , ์›๋ณธ html๊ณผ DOM Tree๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

Last updated