2012-03-30 16 views
8

Voglio fare una funzione generica in jquery per selezionare tutte le funzionalità. Ho una visualizzazione a schede nella mia pagina web.Ricerca elementi con ID dinamico

L'ID del mio componente è: tabId: someDynamicId: rowId: componentId dove, someDynamicId viene generato dinamicamente.

Quindi in jQuery voglio trovare l'elemento il cui id inizia con: tabId: someDynamicId & termina con componentId. E, tabId, someDynamicId & componentId verrebbe passato come argomento alla funzione generica in cui questo elemento deve essere trovato.

risposta

8

E 'semplice:

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

Ma sto raccomandando usare gli strumenti giusti per questo lavoro. Gli ID sono utili per trovare elementi specifici, ma nel tuo caso è meglio usare una o due classi e attributi di dati. Per esempio:

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

poi trovare tutti gli elementi e utilizzare $ $ (this) .data ('componente-id ') e $ (this) .data (' scheda-id ') (' schede.')

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

Aggiornamento:

C'è esempio di utilizzo di questo come la funzione:

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 che è stato fantastico! – tusar

+0

Grazie amico .. Ha funzionato :) :) –

2

È possibile farlo con regex e filter(). Qualcosa del genere dovrebbe funzionare. Questo particolare esempio cerca un id che inizia con "uno" seguito da un numero e finisce in "due". Verifica l'esempio http://jsfiddle.net/5eXm4/.

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

EDIT: È possibile utilizzare le variabili in regex appena li dichiarano come questo:

var re = new RegExp(myVar); 
+0

Buono un bro ma voglio usare le variabili. Non riesco a programmare a dovere la mia funzione come in regex perché nel mio caso non so che ID inizi con uno o due o tre. Quindi come farlo ??? Per favore rispondi. –

+0

Dovrai estrarre un modello dai tuoi id e confrontarlo con quello. Come appare un tipico ID di componente? Vedi anche modificare – elclanrs

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