jQuery: ¿cómo buscar dentro de una clase una coincidencia parcial y eliminar solo esa clase?

Bueno, estoy almacenando variables dentro de una clase que se usarán para otros elementos. Puede que no sea el mejor enfoque para esto, pero es más fácil de hacer cuando tomo el elemento usando $("tr").each(function{ // code }); ¿Quizás hay un atributo mejor para almacenar estas variables en ?? ¿O una mejor forma general de hacerlo?

Pero básicamente, estoy tratando de usar el markRow: texto como una cadena de inicio a la variable que necesito para determinar si esto tr elemento tiene dentro de su clase. Si tiene el texto "markRow:", entonces necesito split(":"), solo esta clase (porque el tr los elementos pueden tener más de 1 clase definida en ellos), en una matriz y solo tomar el segundo límite de la matriz. Entonces, después de usar estas variables, necesito borrar todas las clases de cada tr elemento que tiene markRow: definido dentro de la clase, pero no quiero eliminar ninguna otra clase que estos tr elementos pueden tener dentro de ellos al hacer esto.

¿Alguien puede ayudarme a empezar con esto? Estaba pensando en el selector :contains para una coincidencia parcial para el markRow: cadena, pero no estoy seguro de si esto es bueno. Quizás usando filter de alguna manera podría ayudar?

preguntado el 01 de febrero de 12 a las 03:02

2 Respuestas

Según mi comprensión de su problema, esto es lo que puede intentar.

$('tr').each(function(){
   var $tr = $(this), classes = $tr[0].className, finalClasses = [];

   //If className contains 'markRow:' then process it
   if(classes.indexOf('markRow:') != -1){
       $.each(classes.split(' '), function(i, class){
          //If class does not contain `markRow:' 
          //then add this class else ignore it
          if(class.indexOf('markRow:') == -1){
             finalClasses.push(class);
          }
       }); 
       //Finally combine all the classes not containing `markRow:` 
       //and set it to tr
       $tr[0].className = finalClasses.join(' ');
   }
}); 

Dejando de lado su problema, le sugiero que use atributos de datos para transmitir datos junto con el elemento en la página. Es muy fácil recuperar datos de atributos de datos.

P.ej

<div data-info="someInfo" id="div1"></div>

Para obtener data-info valor de atributo de div1 elemento puede utilizar el siguiente código.

var info = $('#div1').data('info');

Para establecer data-info puedes usar este código

$('#div1').data('info', 'someInfo');

.data() referencia: http://api.jquery.com/jQuery.data/

Respondido 01 Feb 12, 07:02

Ok, genial probaré el data() método que. Impresionante, no sabía nada de esto. Sin embargo, ¿me pregunto si es compatible con XML? - SOLO

Para comprender los atributos de los datos, consulte este enlace. ejohn.org/blog/html-5-data-attributes - ShankarSangoli

Dice esto: Note: this method currently does not provide cross-platform support for setting data on XML documents, as Internet Explorer does not allow data to be attached via expando properties. No creo que esté configurando datos en un documento XML aquí, ya que está directamente en el elemento, pero necesito que sea compatible con todos los navegadores, por cierto ... - SOLO

Sí, los atributos de datos de los elementos html son compatibles con todos los navegadores. Si el navegador no los admite de forma nativa, jQuery agrega su propio código para manejarlo. Así que no se preocupe por la compatibilidad con varios navegadores para usar atributos de datos. - ShankarSangoli

Si comprendo lo que quiere hacer, puede intentar usar el data() método de jQuery.

http://api.jquery.com/jQuery.data/

Eso está configurado para hacer lo que está tratando de lograr, solo correctamente.

Respondido 01 Feb 12, 07:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.