Javascript에서 Element를 조작하려 하려면 id또는 class명으로 document elements를 가져와서 조작한다. 하지만 native방식으로 element를 가져오는것 보다 Jquery를 사용해서 가져오는것이 편했다. 이때 까지만 해도 Jquery의 CSS selector를 통해 가져온 결과 값이 당연히 Element 객체 인줄 알았다.
하지만 Jquery의 결과값에서 forEach()를 호출하려하면 에러가 발생한다. 이땐 그냥 무심코 지나갔지만 이 에러가 의미하는 것은 JQuery 의 리턴값이 Element객체가 아니라 Jquery Object라는 것을 의미한다.
정리하자면 아래와 같다.
Jquery Selector는 무엇을 리턴하는가 ?
Jquery Object의 특징은 ??
Dom에 대한 프로퍼티 수정을 브라우저 별로 처리해준다. ex) IE9이전의 버전에선 .innerHTML은 테이블 요소에 읽기 전용이기 때문에 수정이 불가능하지만 Jquery Object를 통해 수정 할경우 .text or .html Jquery가 알아서 처리해준다.
동일한 selector에 대한 결과 값은 객체로서는 다르다. ex) $('#a') != $('#a') 이지만 $('#a')[0] == $('#a')[0] 이다.
Jquery Object는 동적이지 않는다. 기존에 선언한 JqueryObject가 가르키는 DOM에 관한 텍스트가 바뀌었을대 변수로 선언된 JqueryObject의 text 결과는 기존의 값이다.
위 Object를 Native Object라고한다.