2016-09-02 5 views
0

최근에 HTML 문서에서 여러 노드의 값을 추출해야했습니다. querySelectorAll을 사용하여 노드를 얻었습니다. querySelectorAll은 조건을 충족하는 노드의 목록을 반환합니다. 내가 전에 arr.map 사용했다, 그래서 (작동하지 않았다)이처럼하려고 노력 :왜 querySelectorAll 결과에 맵을 사용할 수 없습니까?

var elems = document.querySelectorAll('select option:checked'); 
values = elems.map(function(obj) {return obj.value}); 

내가 MDN에서 문서를 읽을 때, 나는이 대신 같은 것을 사용했다는 것을 보았다 :

var elems = document.querySelectorAll('select option:checked'); 
var values = Array.prototype.map.call(elems, function(obj) { 
    return obj.value; 
}); 

내 질문은 내가 무엇을 querySelectorAll에서 얻을 것은 배열의 경우 내가 다른 배열에 대한 것처럼, 내가 왜, 첫 번째 표현식을 사용할 수 없다?

+5

'querySelectorAll'은 배열을 반환하지 않고'array-like-object'를 반환합니다. 문서를 참조하는 경우 완전히 읽습니다. – Rayon

+2

[___'NodeList'가 배열이 아닌 이유는 무엇입니까? ___] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array) – Rayon

답변

5

제 질문은 querySelectorAll에서 얻은 것이 배열 인 경우 왜 다른 배열과 마찬가지로 첫 번째 표현식을 사용할 수 없습니까?

querySelectorAll 그것이 NodeList을 반환 배열을 반환하지 않습니다.

MDN (강조 광산)에서 :

가 선택기의 지정된 그룹과 일치 (문서의 노드의 깊이 우선 예약 주문 탐색을 사용하여) 문서 내의 요소의리스트를 돌려줍니다. 반환 된 개체는 NodeList입니다.

NodeList는 프로토 체인 Array.prototype가 없으므로 배열 방법이 없다.

+0

흠, 배열이라고 가정했는데, 지금 NodeLists에 대해 읽었습니다. 귀하의 답변 주셔서 감사합니다! –

관련 문제