2009-06-29 4 views
3

나는 이것을 반복적으로하고 있습니다.jQuery가 ID를 통해 필터링 한 다음 일치 항목을 캡처합니다.

$jq("button").filter(function(){ 
    return this.id.match(/^user_(\d+)_edit$/); 
}).click(function(){ 
    var matches = this.id.match(/^user_(\d+)_edit$/); 
    var user_id = matches[1]; 

    alert('click on user edit button with ID ' + user_id); 
}); 

그래서 나는 몇 가지 버튼에 내가 사용자 ID를 필요로하는 클릭 이벤트 처리기에 클릭 이벤트를 적용 할. 두 번째 경기를 피할 수있는 방법이 있습니까?

$jq("button").filter(function(){ 
    return this.id.match(/^user_(\d+)_edit$/); 
}).click(function(){ 
    var user_id = some_magic_variable; 

    alert('click on user edit button with ID ' + user_id); 
}); 

감사합니다.

답변

10

첫 번째 경기를 피하는 것은 어떻습니까?

$jq("button[id^=user][id$=edit]").click(function() { 

}); 

는 ID가 모든 버튼을 선택겠습니까 그 starts with 사용자와 ends with 편집.

$jq('button.edit_user').click(function() { 

}); 

그것은이다

정직하지만, 사용 사례보고, 단순히 다음 사용자에게 "edit_user"의 클래스를 수정하는 것을 의미하고 모든 버튼 만 할를 제공하기 위해 더 나은 방법이 될 것입니다 더 빠르고, 더 빠르고, 비슷한 목적을 가진 모든 요소를 ​​얻는 jQuery 방법.

는 지금까지 사용자 ID를 얻기로 사용자 정의에 대한 몇 가지 활발한 토론이 사이트 (Custom attributes - Yay or nay?)에 속성이 지났는데 나는 개인적으로 내 요소에 data-userid='5'을 한 후 바로 ID를 얻기 위해 var id = $(this).attr('data-userid');을한다. 멋지고 쉽습니다. XHTML로 확인하지 않습니다. 그런 다음

$(function() { 

$("button").each(function() { 
     var matches = $(this).attr("id").match(/^user_(\d+)_edit$/); 

     if (matches) { 
     $(this).data("user_edit_id",matches[1]); 
     } 
    } 
}); 

당신은 간단하게 할 수 있습니다 : 개인적으로

+1

+1 정규식보다 더 예쁘고 유용한 제안입니다. – karim79

+0

'edit_user'클래스 사용에 동의하지만 각 버튼에 대한 user_id 링크가 필요합니다. 나는 이것을 할 수있다.

+1

+1 당신을 파올로에게 데려 간다 ... 당신이 나를 상대로 내 마지막 10 표에 나를 데려왔다. 그 중 2 ~ 3 점이 너의 것이었다. 통찰력 제공 중지! – Sampson

3

필터를 수행 할 때 요소 자체에 ID를 저장할 수 있으며 (jQuery의 data 메서드 사용) 클릭 처리기에서 해당 값을 검색 할 수 있습니다.

$jq("button").filter(function(){ 
    var $this = $jq(this); 
    var matches = $this.attr('id').match(/^user_(\d+)_edit$/); 

    if (matches) { 
     $this.data('idNumber', matches[1]); 
    } 

    return matches; 
}).click(function(){ 
    var user_id = $(this).data('idNumber'); 

    alert('click on user edit button with ID ' + user_id); 
}); 
0

, 나는 DOM을 사전 처리 할

$("button").filter(function(){ 
    return $(this).data("user_edit_id"); 
}).click(function(){ 
    var user_id = $(this).data("user_edit_id"); 

    alert('click on user edit button with ID ' + user_id); 
}); 

그것은 당신이 원하는에 대한 완벽한 해결책은 아니지만 하나의 방법입니다 ...

+0

이 솔루션의 커다란 팬이 아니기 때문에 불필요하게 모든 버튼을 계속 스윕합니다. 최소한 일치하는 항목이 있으면 각 항목에 클래스를 추가하고 클릭과 함께 묶어서 필터 기능을 완전히 피할 수 있습니다. 그래서 : $ ('button'). each (...). filter ('. user_edit'). click (...); –

+0

사실,하지만 현재 문제의 맥락에서 솔루션을 제안하고있었습니다 (마크 업 변경없이) –

관련 문제