2012-03-30 32 views
8

Tôi muốn tạo một hàm chung trong jquery để chọn tất cả các chức năng. Tôi có chế độ xem theo tab trong trang web của mình.Tìm các phần tử có Id động

Id của thành phần của tôi là: tabId: someDynamicId: rowId: componentId trong đó, someDynamicId được tạo động.

Vì vậy, trong jquery tôi muốn tìm phần tử có id bắt đầu bằng - tabId: someDynamicId & kết thúc bằng componentId. Và, tabId, someDynamicId & componentId sẽ được chuyển làm đối số cho hàm chung mà cần tìm phần tử này.

Trả lời

8

Rất đơn giản:

$('[id^=tabId][id$=componentId]').each(function(){ 
    var id = $(this).attr('id'); // tabId:someDynamicId:rowId:componentId​ 
    var list = id.split(':');​​ 

    console.log(list[0]); // tabId 
    console.log(list[1]); // someDynamicId 
    console.log(list[2]); // rowId 
    console.log(list[3]); // componentId​ 
}) 

Wildcards in jQuery selectors

Nhưng tôi đang giới thiệu để sử dụng các công cụ phù hợp cho công việc này. ID là hữu ích cho việc tìm kiếm phần tử cụ thể, nhưng trong trường hợp của bạn tốt hơn là sử dụng một hoặc hai lớp và thuộc tính dữ liệu. Ví dụ:

<div class="tabs" data-component-id="x" data-tab-id="y"> 

Sau đó, tất cả các yếu tố $ và sử dụng $ .data (this) ('thành phần id ') và $ (this) .data (' tab-id ') (' tab.')

$('.tabs').each(function(){ 
    var component_id = $(this).data('component-id'); 
    var tab_id = $(this).data('tab-id'); 
}); 

cập nhật:

có ví dụ của việc sử dụng điều này như chức năng:

function(tabId,componentId) { 
    $('[id^='+tabId+'][id$='+componentId+']').each(function(){ 
     var id = $(this).attr('id'); // tabId:someDynamicId:rowId:componentId​ 
     var list = id.split(':');​​ 

     console.log(list[0]); // tabId 
     console.log(list[1]); // someDynamicId 
     console.log(list[2]); // rowId 
     console.log(list[3]); // componentId​ 
    }) 
} 
+0

+1 thật tuyệt vời! – tusar

+0

Cảm ơn người đàn ông .. Nó đã làm việc :) :) –

2

Bạn có thể thực hiện việc này với regex và filter(). Một cái gì đó như thế này sẽ làm việc. Ví dụ cụ thể này tìm kiếm một id bắt đầu bằng "một" theo sau là một số và kết thúc bằng "hai". Kiểm tra ví dụ http://jsfiddle.net/5eXm4/.

$.fn.regexFindId = function(re){ 
    return this.filter(function(){ 
     var id = this.id; 
     return id.match(re); 
    }); 
}; 

EDIT: Bạn có thể sử dụng các biến trong regex chỉ cần khai báo chúng như thế này:

var re = new RegExp(myVar); 
+0

Tốt một bro nhưng tôi muốn sử dụng các biến. Tôi không thể mã cứng chức năng của tôi như trong regex bởi vì trong trường hợp của tôi tôi không biết rằng id sẽ bắt đầu với một hoặc hai hoặc ba. Vậy làm thế nào để làm điều đó ??? Xin hãy trả lời. –

+0

Bạn sẽ phải trích xuất một mẫu từ id của bạn và phù hợp với điều đó. ID thành phần điển hình trông như thế nào? Ngoài ra, hãy xem chỉnh sửa – elclanrs

1
function(tableid, dynamicid, componentid) 
    { 
    a = tableid+dynamicid ;  
    $(" [id^="+a+"][id$="+componentid+"] "). each(function() 
    { 
        // do ur stuff 
    } 
    ); 
    } 
Các vấn đề liên quan