2011-04-11 5 views
3

jQuery에서 .end() 함수를 사용하는 데 문제가 있습니다. 내가 읽은 문서는 필터 또는 추가 선택에서 "롤백"변경으로 광고합니다. 예 :파괴적 메서드로 jQuery end() 함수 사용

var someDivs = $('div'); 
someDivs 
    .filter('li') 
    .css('color', 'green') 
.end(); // ok, reverted back to original wrapper 

반면에 이것은 작동하지 않습니다. 난 그냥 html로(), 텍스트() 및 수()와 같은 특정 체인 파괴적인 방법 후에 호출되는 올바른 해요 있는지 확인하기 위해 노력하고있어

someDivs 
    .get(0) // get DOM element at index 0 
.end(); // error, executing a jQuery method on a plain javascript object. 

, 그것은 원래로 되돌릴 불가능 싸개.

미리 감사드립니다.

+0

그것은 불가능합니다. '$ (someDivs.get (0)). end();'. 내 대답을 업데이트하고 이것을 – Khez

+0

@Khez에 추가하면 슬프게도 작동하지 않습니다.다시 처음부터 요소를 선택하는 것과 같습니다. 어떤 경우에 ... end()가 어디로 가나 요? –

+0

@ Box9 ... 네가 틀렸어. [jQuery 객체를 둘러싸 기위한 DOM 요소] (http://api.jquery.com/jQuery/) – Khez

답변

3

예, end()은 jQuery 객체를 반환하는 메소드에서만 작동합니다. 문자열 (.html(), .text()) 또는 DOM 요소 (.get())를 반환하는 메서드는 이후에 jQuery 메서드를 체인화 할 수 없습니다.

3

get()은 jQuery 요소가 아닌 실제 HTML DOM 요소를 반환합니다. 당신은 eq()를 사용해야합니다 :

someDivs.eq(0).end(); 

혹시 DOM 요소에서의 jQuery 개체 컨텍스트에 반환해야하는 경우

. 항상 $()에 요소를 던져 넣을 수 있습니다. 예를 들어 위의 문을 다시 작성할 수 있습니다 : 당신은 대부분의 이벤트 핸들러에 $(this)을 할 이유

$(someDivs.get(0)).end(); 

이 ^이 정확히입니다. jQuery 객체가 아닌 DOM 요소가 전달됩니다.

+0

나는 그가 .html()과 .text()도 언급 했으므로 OP가 그것을 알고 있다고 생각한다. –

+0

아니요 .end()가 someDivs를 다시 가져 오지 않습니다. .get (0)을 수행하면 DOM 요소가 반환되므로 원래 목록 기록이 손실됩니다. – Lathan

2

그렇습니다. "파괴적인"함수는 이 아니고 인 jQuery 객체 인 값을 반환합니다.

그러나 선택 항목을 변수에 저장할 때 .end()을 사용할 필요조차 없습니다 (예 : someDivs). jQuery의 순회 함수 (children(), filter() 등 ...)는 실제로 적용된 jQuery 객체를 수정하지만 대신 새 객체를 반환합니다. JQuery와 문서의이 섹션에서는 체인 동안 어떤 일이 발생하는지 이해하는 데 많은 도움이 될 것입니다 :

DOM 요소의 다른 세트를 일치하는 jQuery를 객체 인스턴스 에서 작동하고 새로운 생산 jQuery의 DOM 탐색 방법, 대부분의 . 이 발생하면 마치 새 집합 의 요소가 객체 내부에 유지되는 스택 에 푸시 된 것처럼 보입니다. 각 연속 필터링 방법 은 스택에 새 요소 집합을 푸시합니다. 더 오래된 요소 이 필요하면 end()을 사용하여 을 스택에서 다시 팝합니다. 원래의 jQuery 개체가 수정되지 않기 때문에

대신 .end()를 사용하여, 당신은 단순히 원본을 참조 할 수 있습니다

var html = someDivs.filter('li').html(); 
var text = someDivs.filter('p').text();