jQuery 객체와 DOM 요소의 관계를 이해하고 싶습니다.
jQuery가 요소를 반환 [object Object]
하면 경고 처럼 표시됩니다 . 시 getElementByID
는로 나타 요소를 반환합니다 [object HTMLDivElement]
. 그게 정확히 무엇을 의미합니까? 내 말은 둘 다 차이가있는 객체인가?
또한 jQuery 객체와 DOM 요소에서 어떤 메소드가 작동 할 수 있습니까? 단일 jQuery 객체가 여러 DOM 요소를 나타낼 수 있습니까?
답변
jQuery 객체와 DOM 요소 간의 관계를 이해하고 싶습니다.
jQuery 객체는 DOM 요소를 포함하는 배열과 같은 객체입니다. jQuery 객체는 사용하는 선택기에 따라 여러 DOM 요소를 포함 할 수 있습니다.
또한 jQuery 객체와 DOM 요소에서 어떤 메소드가 작동 할 수 있습니까? 단일 jQuery 객체가 여러 DOM 요소를 나타낼 수 있습니까?
jQuery 함수 (전체 목록은 웹 사이트에 있음)는 DOM 요소가 아닌 jQuery 객체에서 작동합니다. .get()
원하는 인덱스의 요소를 직접 사용 하거나 액세스 하여 jQuery 함수 내의 DOM 요소에 액세스 할 수 있습니다 .
$("selector")[0] // Accesses the first DOM element in this jQuery object
$("selector").get(0) // Equivalent to the code above
$("selector").get() // Retrieve a true array of DOM elements matched by this selector
즉, 다음과 같은 결과를 얻을 수 있습니다.
<div id="foo"></div>
alert($("#foo")[0]);
alert($("#foo").get(0));
alert(document.getElementById("foo"));
jQuery 객체에 대한 자세한 내용 은 설명서를 참조하십시오 . 또한 문서를 확인하십시오..get()
답변
jQuery를 사용하여 DOM 요소를 가져 오면 jQuery 객체 반환에는 요소에 대한 참조가 포함됩니다. 와 같은 기본 함수를 사용 getElementById
하면 jQuery 객체에 포함되지 않고 요소에 대한 참조를 직접 가져옵니다.
jQuery 객체는 여러 DOM 요소를 포함 할 수있는 배열과 같은 객체입니다.
var jQueryCollection = $("div"); //Contains all div elements in DOM
위의 줄은 jQuery없이 수행 할 수 있습니다.
var normalCollection = document.getElementsByTagName("div");
사실, 이것이 바로 .NET과 같은 간단한 선택기를 전달할 때 jQuery가 내부적으로 수행하는 작업 div
입니다. 다음 get
메소드를 사용하여 jQuery 컬렉션 내의 실제 요소에 액세스 할 수 있습니다 .
var div1 = jQueryCollection.get(0); //Gets the first element in the collection
jQuery 객체 내에 요소 또는 요소 집합이있는 경우 jQuery API에서 사용할 수있는 모든 메서드를 사용할 수 있지만 원시 요소가있는 경우 네이티브 JavaScript 메서드 만 사용할 수 있습니다.
답변
나는 지난달에 jQuery를 거의 사용하기 시작하지 않았고 비슷한 질문이 떠올랐다. 지금까지받은 모든 답변은 유효하고 점에 있지만 매우 정확한 답변은 다음과 같습니다.
함수에 있고 호출 요소를 참조하기 위해 this
, 또는 $(this)
;을 사용할 수 있다고 가정 해 보겠습니다 . 그러나 차이점은 무엇입니까? 을 사용할 때 jQuery 객체 내부 $(this)
에 래핑 this
됩니다. 이점은 객체가 jQuery 객체이면 모든 jQuery 함수를 사용할 수 있다는 것입니다.
var s = '<div>hello <a href='#'>world</a></div><span>!</span>'
문자 그대로 $ () :로 래핑하여 jQuery 객체 내부 에 요소의 문자열 표현을 래핑 할 수도 있으므로 매우 강력 합니다 $(s)
. 이제 jQuery로 모든 요소를 조작 할 수 있습니다.
답변
대부분의 jQuery 멤버 Functions
에는 반환 값이 없지만 현재 jQuery Object
또는 다른 jQuery Object
.
그래서,
console.log("(!!) jquery >> " + $("#id") ) ;
[object Object]
, 즉에 대해 jQuery Object
선택자 String
( "#id"
) 를 평가 한 결과 인 컬렉션을 유지하는 a 를 반환 합니다 Document
.
동안 ,
console.log("(!!) getElementById >> " + document.getElementById("id") ) ;
반환 [object HTMLDivElement]
(또는 실제로 [object Object]
IE에서) 반환 값은 때문에 / 인 경우 div
Element
.
또한 jQuery 객체와 DOM 요소에서 어떤 메소드가 작동 할 수 있습니까? (1) 단일 jQuery 객체가 여러 DOM 요소를 나타낼 수 있습니까? (2)
(1) Function
jQuery에는 DOM과 관련된 구성원 호스트가 Object
있습니다. imo를 수행하는 가장 좋은 방법 Function
은 특정 작업 (예 : Node
s 선택 또는 조작) 이 있으면 jQuery API 문서에서 관련성을 검색하는 것입니다.
(2) 예, 한 사람 jQuery Object
이 여러 DOM 목록을 유지할 수 있습니다 Element
. 이 자동 캐싱 동작을 기반으로하는 여러 가지 Functions
(예 : jQuery.find
또는 jQuery.each
)가 있습니다.
답변
그것은 당신의 브라우저가 영리하다는 것입니다. 둘 다 객체이지만 DOMElement는 특수 객체입니다. jQuery는 Javascript 객체에 DOMElements를 래핑합니다.
더 많은 디버그 정보를 얻으려면 Firefox 용 Firebug 및 Chrome의 내장 검사기 (Firebug와 매우 유사)와 같은 디버깅 도구를 살펴 보는 것이 좋습니다.
답변
언급 한 것 외에도 jquery-object의 설명에 따라 jQuery 객체를 가져 오는 이유에 대해 추가하고 싶습니다.
- 적합성
요소 메서드의 구현은 브라우저 공급 업체 및 버전에 따라 다릅니다.
예를 들어 innerHTML
요소 집합 은 대부분의 Internet Explorer 버전에서 작동하지 않을 수 있습니다.
innerHTML을 jQuery 방식으로 설정할 수 있으며 jQuery는 브라우저의 차이점을 숨기는 데 도움이됩니다.
// Setting the inner HTML with jQuery.
var target = document.getElementById( "target" );
$( target ).html( "<td>Hello <b>World</b>!</td>" );
- 편의
jQuery는 개발자의 원활한 경험을 위해 jQuery 객체에 바인딩 된 메소드 목록을 제공합니다 . http://api.jquery.com/ 에서 일부 메소드를 확인하십시오 . 웹 사이트는 또한 일반적인 DOM 조작을 제공합니다 . 두 가지 방식으로 요소 newElement
뒤에 저장된 요소를 삽입하는 방법을 살펴 보겠습니다 target
.
DOM 방식,
// Inserting a new element after another with the native DOM API.
var target = document.getElementById( "target" );
var newElement = document.createElement( "div" );
target.parentNode.insertBefore( newElement, target.nextSibling );
jQuery 방식,
// Inserting a new element after another with jQuery.
var target = document.getElementById( "target" );
var newElement = document.createElement( "div" );
$( target ).after( newElement );
이것이 보충제가되기를 바랍니다.