2010-11-05 24 views
17

Actualmente estoy usando esto para conseguir la clase de un bit específico de HTML en la página:jQuery: Seleccione solo una clase que contenga una cadena?

$(this).parent("div").attr('class') 

Pero eso div tiene múltiples clases: current_status status_billed

Mi objetivo final aquí es agarrar la clase que comienza con status_ y lo reemplaza con un nombre de clase diferente.

Así que usando mi función .parent() anterior, soy capaz de seleccionar el div que necesito, pero luego me tenga que quitar la clase status_billed y reemplazarlo con, por ejemplo, status_completed (o una serie de otros nombres de clase).

Respuesta

41

Seleccionar div s que tienen la clase status_billed:

$(this).parent('div.status_billed') 

Seleccionar div s class cuyo atributo contiene status_:

$(this).parent('div[class*=status_]') 

Eso es lo mejor que se obtendrá con jQuery selectors. Se puede hacer mejor uso de .filter():

$(this).parent('div').filter(function() 
{ 
    var classes = $(this).attr('class').split(' '); 
    for (var i=0; i<classes.length; i++) 
    { 
     if (classes[i].slice(0,7) === 'status_') 
     { 
      return true; 
     } 
    } 
    return false; 
}); 

... pero no estoy seguro de por qué estás haciendo todo esto - .parent() vuelve a lo sumo 1 elemento. Quizás quiso decir .closest() o .parents()?

+1

Ah, eso es una buena idea, gracias. Acabo de eliminar mi publicación para que no pierda el tiempo yendo por esa ruta. – McStretch

+0

@McStretch: Vi. :) –

+0

También puede usar las clases de devolución [i]; en lugar de devolver verdadero; para devolver el estado actual_xxxx. –

Cuestiones relacionadas