2012-03-30 17 views
8

Chcę utworzyć ogólną funkcję w jquery, aby wybrać wszystkie funkcje. Na mojej stronie mam widok z kartami.Znajdowanie elementów z dynamicznym Id

Identyfikatorem mojego składnika jest: tabId: someDynamicId: rowId: componentId gdzie, someDynamicId jest generowane dynamicznie.

Tak więc w jquery chcę znaleźć element, którego id zaczyna się od - tabId: someDynamicId & kończy się na componentId. I tabId, someDynamicId & componentId zostanie przekazany jako argument do ogólnej funkcji, w której element ten musi zostać znaleziony.

Odpowiedz

8

To proste:

$('[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

ale jestem polecając używać właściwych narzędzi do tej pracy. Identyfikatory są przydatne do znalezienia konkretnego elementu, ale w twoim przypadku lepiej użyć jednej lub dwóch klas i atrybutów danych. Na przykład:

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

Następnie znaleźć wszystkie elementy i używać $ $ (this) .data ('składnik-id ') i $ (this) .data (' tab-id ') (' zakładki').

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

Aktualizacja:

jest przykładem wykorzystania tego jako funkcję:

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, która była niesamowita! – tusar

+0

Dzięki człowieku .. To zadziałało :) :) –

2

Możesz to zrobić z regex i filter(). Coś takiego powinno zadziałać. Ten konkretny przykład szuka identyfikatora, który rozpoczyna się od "jeden", po którym następuje liczba i kończy się na "dwa". Sprawdź przykład: http://jsfiddle.net/5eXm4/.

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

EDIT: Można używać zmiennych w regex tylko zadeklarować je tak:

var re = new RegExp(myVar); 
+0

Dobry jeden brat, ale chcę używać zmiennych. Nie mogę zakodować funkcji tak jak w regex, ponieważ w moim przypadku nie wiem, że id będzie zaczynać się od jednego lub dwóch lub trzech. Jak to zrobić? Proszę odpowiedz. –

+0

Musisz wydobyć wzór ze swoich identyfikatorów i dopasować się do niego. Jak wygląda typowy identyfikator komponentu? Zobacz także edycję – elclanrs

1
function(tableid, dynamicid, componentid) 
    { 
    a = tableid+dynamicid ;  
    $(" [id^="+a+"][id$="+componentid+"] "). each(function() 
    { 
        // do ur stuff 
    } 
    ); 
    } 
Powiązane problemy