2012-03-30 20 views
8

Quiero hacer una función genérica en jquery para seleccionar todas las funcionalidades. Tengo una vista con pestañas en mi página web.Encontrar elementos con Id dinámico

Identificación de mi componente es: tabId: algunaDynamicID: rowId: componentId donde, dynamicDynamic se genera dinámicamente.

Así que en jquery quiero encontrar el elemento cuya identificación comienza con - tabId: algunaDynamicID & termina con componentId. Y, tabId, someDynamicId & componentId se pasará como argumento a la función genérica donde este elemento necesita ser encontrado.

Respuesta

8

Es muy sencillo:

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

Pero estoy recomendando usar las herramientas adecuadas para este trabajo. Los ID son útiles para encontrar elementos específicos, pero en su caso es mejor usar una o dos clases y atributos de datos. Por ejemplo:

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

luego encontrar todos los elementos y el uso $ $ (this) .data ('componente-id ') y $ (this) .data (' pestaña-id ') (' pestañas').

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

actualización:

No es ejemplo del uso de esta función como:

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 que fue increíble! – tusar

+0

Gracias, hombre ... Funcionó :) :) –

2

Puede hacerlo con regex y filter(). Algo como esto debería funcionar. Este ejemplo particular busca una identificación que comienza con "uno" seguido de un número y termina en "dos". Ver ejemplo http://jsfiddle.net/5eXm4/.

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

EDIT: Puede utilizar variables en expresiones regulares acaba de declarar como esto:

var re = new RegExp(myVar); 
+0

Bueno, hermano, pero quiero usar variables. No puedo codificar mi función como en expresiones regulares porque en mi caso no sé que la identificación comenzará con uno o dos o tres. Entonces, ¿cómo hacer eso? Por favor responde. –

+0

Tendrás que extraer un patrón de tus ID y hacer coincidir eso. ¿Cómo se ve una identificación de componente típica? También vea editar – elclanrs

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