Jquery live() vs delegate()
저는 인터넷과 다른 곳에서 사이의 차이점에 대한 게시물을 읽었습니다.live()
그리고.delegate()
. 하지만 제가 찾고 있는 답을 찾지 못했습니다. 만약 이것이 속임수라면 저에게 말해주세요.
우리 사이의 차이점을 알고 있습니다.live
그리고.delegate
저것이live
체인에서 사용할 수 없습니다.저도 어디선가 읽은 적이 있습니다.delegate
경우에 따라 성능이 향상됩니다.
제 질문은 당신이 어떤 상황에서live
대신에delegate
?
갱신하다
성능의 차이를 알아보기 위해 간단한 테스트를 해봤습니다.
새 제품도 추가했습니다..on()
jQuery 1.7+에서 사용할 수 있습니다.
결과는 답변에 나와 있는 성능 문제를 거의 요약한 것입니다.
- 사용하지않습니다.
.live()
당신의 jQuery 버전이 지원하지 않는 한..delegate()
. - 사용하지않습니다.
.delegate()
당신의 jQuery 버전이 지원하지 않는 한..on()
.
사이의 차이.live()
그리고..delegate()
그 사이보다 훨씬 더 큽니다delegate()
그리고..on()
.
나는 절대 사용하지 않습니다.live
; 사용의 이점을 고려합니다.delegate
압도적일 정도로 실질적일 수 있습니다.
의 한가지 이점은live
그것의 구문이 그것의 그것과 매우 가깝다는 것입니다.bind
:
$('a.myClass').live('click', function() { ... });
delegate
, 하지만 , 는 약간 더 장황한 구문을 사용합니다.
$('#containerElement').delegate('a.myClass', 'click', function() { ... });
하지만 이것은 제가 보기에는 실제로 일어나고 있는 일에 대해 훨씬 더 명확하게 보여주는 것 같습니다.당신은 그 사실을 깨닫지 못합니다.live
이벤트가 실제로 캡처되는 예document
; 와 함께delegate
, 이벤트 캡처가 발생하는 것은 확실합니다.#containerElement
. 당신은 같은 일을 할 수 있습니다.live
, 하지만 구문은 점점 더 끔찍해집니다.
이벤트를 캡처할 컨텍스트를 지정하면 성능도 향상됩니다.위드 더live
예를 들어, 전체 문서를 한 번 클릭할 때마다 선택기와 비교해야 합니다.a.myClass
일치하는지 확인합니다.와 함께delegate
, 그것은 단지 안에 있는 요소들일 뿐입니다.#containerElement
. 이것은 분명히 성능을 향상시킬 것입니다.
마침내.live
브라우저에서 다음을 찾을 것을 요구합니다.a.myClass
그것이 현재 존재하는지의 여부.delegate
는 이벤트가 트리거될 때만 요소를 찾아 성능을 향상시킵니다.
NBdelegate
사용하다live
막후에서 뭐든 할 수 있도록live
당신이 할 수 있는.delegate
. 제 대답은 일반적으로 사용되는 것처럼 그것들을 다룹니다.
로 로 도live
도 아니다delegate
현대 jQuery에서 이벤트 위임을 하는 가장 좋은 방법입니다.새로운 구문(jQuery 1.7 기준)은 함수와 함께 제공됩니다.구문은 다음과 같습니다.
$('#containerElement').on('click', 'a.myClass', function() { ... });
다음을 제외하고는 모두 동일합니다.
.delegate()
힐수컬수다힐ue의nsew,ef을컬lneau.live()
전체 페이지에서 이벤트를 처리해야 합니다..live()
된 DOM 선택합니다 DOM로합니다.
를 .delegate()
전화해요..live()
, 하지만 추가 컨텍스트 매개 변수를 전달합니다.
https://github.com/jquery/jquery/blob/master/src/event.js#L948-950
에 저는 항상 를합니다..delegate()
꼭, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .body
$(document.body).delegate('.someClass', 'click', function() {
// run handler
});
의 jQuery에는 jQuery가 있습니다.delegate
기능성.호출할 때 선택기 또는 요소를 컨텍스트 속성으로 전달하면 됩니다..live()
. 물론입니다, 페이지에 실어야 합니다.
$('.someClass', '#someContainer').live('click',function() {
// run handler
});
그리고 당신은 당신과 같은 행동을 하고 있습니다..delegate()
.
두 가지 상황이 떠오릅니다.
당신은 사용할 것입니다.
delegate
body
요소를 사용하면 됩니다.live
그 대신에 더 간단합니다.라이브러리의 . 서 jQuery 라이브러리는 다음과 같습니다.
delegate
이벤트가 아직 구현되지 않았습니다.
이 예를 생각해 보십시오.
<ul id="items">
<li> Click Me </li>
</ul>
$('#items').delegate('li', 'click', function() {
$(this).parent().append('<li>New Element</li>');
});
DOM 요소를 선택기의 컨텍스트로 전달함으로써 라이브()를 위임자()가 하는 것과 (거의) 동일하게 동작하게 할 수 있습니다.기본 컨텍스트인 문서가 아닌 컨텍스트에 핸들러를 첨부합니다.아래 코드는 위에 표시된 위임자() 버전과 같습니다.
$("li", $("#items")[0]).live("click", function() {
$(this).parent().append("<li>New Element</li>");
});
하지만 더 나은 성능을 위해 대리인을 사용하는 것이 좋습니다. 여기를 참조하십시오.
언급URL : https://stackoverflow.com/questions/4579117/jquery-live-vs-delegate
'source' 카테고리의 다른 글
두 번째 매개 변수를 기준으로 튜플 정렬 (0) | 2023.09.09 |
---|---|
HTML 테이블을 .xlsx 파일로 내보내는 방법 (0) | 2023.09.09 |
Spring-Security의 기본 Authentication Manager는 무엇입니까?인증 방법은 무엇입니까? (0) | 2023.09.09 |
텐서플로우 백엔드를 가진 케라스가 CPU나 GPU를 마음대로 사용하도록 강요할 수 있습니까? (0) | 2023.09.09 |
버튼 음영(안드로이드) 제거 방법 (0) | 2023.09.09 |