29168


**appendChildする際、親要素に[0]を付与する条件がよく分かりません**

* * *

**getElementById**  
・[0]不要？

[code]

    var p = document.createElement("p");
    document.getElementById('target').appendChild(p);
    
[/code]

* * *

**getElementsByClassName**  
・[0]必要？

[code]

    var p = document.createElement("p");
    document.getElementsByClassName('target')[0].appendChild(p);
    
[/code]

* * *

**document.属性**  
・[0]不要？  
・もしくは属性に因る？

[code]

    var p = document.createElement("p");
    document.body.appendChild(p);
    
[/code]

* * *

**あるいは取得結果数によるのでしょうか？**  
・getElementsByClassNameでも、取得結果が1件なら、[0]不要？


CC BY-SA 3.0
2016-09-27T02:43:52.497
29166
2016-09-27T03:28:29.403
7886
question
javascript dom
appendChildする際、親要素に[0]を付与するのはどんな時？ getElementsByClassNameでは必須？


[getElementById](https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById)

ＩＤはそのページで唯一でなければならないので、（もしあれば）結果は１つのエレメントであり[0]は不要です。

[getElementsByClassName](https://developer.mozilla.org/ja/docs/Web/API/Document/getElementsByClassName)

結果はノードリスト(配列の様に扱える)であり、  
例え結果が１つのエレメントであっても[0]が必要です（値が１つの配列と同じ意味）。

`document.body` は、  
`body`要素を意味する(例えば`id="foo"`をbody要素に付ければ`document.body ===
document.getElementById("foo")`は`true`になる）ただ一つのエレメントですので不要です。

[html 要素](https://developer.mozilla.org/ja/docs/Web/HTML/Element/html) から引用

> 許可された内容 ひとつの `<head>` 要素と、それに続くひとつの `<body>` 要素。

[body 要素](https://developer.mozilla.org/ja/docs/Web/HTML/Element/body) から引用

> `<body>` 要素は、HTML 文書のコンテンツを示す要素です。`<body>` 要素は文書中に一つだけ配置できます。

要するに、ノード検索・指定する場合にノードリスト（ノード集合）が返るような場合にインデクスによるアクセスが必要で、ノードリストにならない一つのノードの場合必要無いということですね。


CC BY-SA 3.0
2016-09-27T02:59:19.080
29168
2016-09-27T03:28:29.403
2016-09-27T03:28:29.403
5044
5044
29166
answer