2011-02-10 2 views
2

이 코드에서는 DOM 개체 (.tabs)을 대리인이 연결되는 원본 선택자로 가져와야합니다..delegate의 선택 자 가져 오기

$(".tabs").delegate("li:not(.selected) a", "click", function() { 
//^ 
// | 
// +-----------i need to get this dom object 
    var selector = $(this).selector; // <---- returns an empty string ? 
    return false; 
}); 

.tabs이 무엇인지 확인하고 개체에 액세스하는 방법은 무엇입니까? 누군가가 똑똑 방법을 찾을 때까지

+0

왜 당신은 선택을해야합니까? – BoltClock

+0

선택기 또는 무엇이든간에. '익명'방식으로 .tab에 액세스 할 수있는 한, 아마도 li의 부모 탐색보다 더 나은 해결책 일 수 있습니다. 페이지에는 다른 탭이있어 조금씩 다르게 처리해야합니다. –

+1

'.selector'가 여기에서 작동하지 않는 이유는 선택기 문자열 대신 DOM 객체 인'this'를 감싸는 jQuery 객체에서 액세스하려고하기 때문입니다. – BoltClock

답변

5

, 해결 방법은 선택한 요소에 자신을 이벤트 핸들러를 첨부 할 수 :

$('.tabs').click(function(event) { 
    event.root = this; // or whatever name suits you best 
}); 

$(".tabs").delegate("li:not(.selected) a", "click", function (event) { 
    // event.root contains the DOM element 
}); 

jQuery를 해당 이벤트 핸들러가 부착 된 순서대로 실행됩니다 보장합니다.

또는 전혀 delegate를 사용하고 (이것은 아마 최고의 솔루션입니다 )를 선택기 자신을 테스트하지 않습니다

$('.tabs').click(function(event) { 
    if($(event.target).is("li:not(.selected) a")) { 
     // this refers to the .tab DOM element 
     // event.target refers to the originally clicked element 
    } 
}); 

업데이트 :

원래 Event 개체는 event.originalEvent을 통해 사용할 수 있습니다.

$(".tabs").delegate("li:not(.selected) a", "click", function (event) { 
    var dom = event.originalEvent.currentTarget; 
}); 

을하지만 currentTarget는 IE9에서 지원됩니다 보인다 낮은 IE 버전의 대안이없는 : 그래서 당신은 할 수 있습니다.

그래서 대부분의 브라우저 간 호환 솔루션은 여전히 ​​위의 것들입니다.

+0

답변 주셔서 감사합니다, 잘 작동;) –

2

.on() 메서드를 사용하면 이벤트 개체를 함수에 전달하고 delegateTarget 속성에 액세스하여 위임 된 대상에 액세스 할 수 있습니다.

예 :

$('.foo').on('click', 'a', function(ev) { 
    // this is the .foo element for this anchor 
    console.log(ev.delegateTarget); 
}); 

작업 예 : http://jsfiddle.net/corydorning/ZzADh/

관련 문제