remove con classlist clase and all agregar addclassname javascript regex replace classname

classlist - Eliminar el nombre de clase del elemento con javascript



remove all class javascript (4)

Encontré la siguiente expresión regular de otra pregunta de desbordamiento de pila: cambiar la clase de un elemento con JavaScript

Y lo he usado con éxito en parte de mi guión, sin embargo, en otro, parece estar fallando.

Junté un caso de prueba muy minimalista en jsFiddle, y también está fallando:

http://jsfiddle.net/ew47Y/1/

HTML:

<div class="foo" id="foo"> hello </div>​

JS:

$(document).ready(function(){ foo = document.getElementById(''foo''); foo.className += '' bar foobar''; alert(foo.className); foo.className.replace( /(?:^|/s)bar(?!/S)/ , '''' ) alert(foo.className); })​


Eso es porque replace realmente no modifica la cadena en la que lo llamas; más bien, devuelve una nueva cadena. Asi que:

foo.className = foo.className.replace( /(?:^|/s)bar(?!/S)/ , '''' )

(Por cierto, no es necesario que haga esto en JavaScript en bruto, ya que los objetos jQuery ofrecen un método removeClass : http://api.jquery.com/removeClass/ . Por lo tanto, podría escribir:

$(''#foo'').removeClass(''bar'');

o:

$(foo).removeClass(''bar'');

)



También hay una solución que utiliza la palabra metacarácter de límite /b :

foo.className.replace(//bbar/b/g ,'''');

Esto puede complacer a alguien, pero tenga en cuenta que el límite de la palabra aparece también entre un carácter de palabra [A-Za-z0-9_] y el carácter de guión. Por lo tanto, un nombre de clase, por ejemplo, ''clase de barra diferente'' también se reemplazaría dando como resultado ''clase - diferente'' . Sin embargo, a diferencia de las soluciones anteriores, la solución " /b " no elimina los caracteres de espacio en blanco antes del nombre de la clase, lo que puede ser deseado, por lo que una cadena, por ejemplo, "barra de la primera barra" , terminará como "primera barra" .


foo.className = foo.className.replace( /(?:^|/s)bar(?!/S)/ , '''' );

o con jQuery (que parece estar usando):

foo.removeClass( ''bar'' );