2015-04-20 10 views
15

Ecco il mio codiceRimuovere tutte le classi da SVG usando jQuery

<!DOCTYPE html> 
<html> 
<body> 
<style>  
    .someClass { 
      fill:gray; 
     } 
</style> 
<svg width="400" height="110"> 
    <rect class="someClass" width="100" height="100"/> 
</svg> 
<svg width="400" height="110"> 
    <rect class="someClass" width="100" height="100"/> 
</svg> 
<svg width="400" height="110"> 
    <rect class="a" width="100" height="100"/> 
</svg> 
</body> 
</html> 

Come rimuovere tutte le classi (.someClass) necessità di rimuovere solo in .someClass nel documento senza utilizzare id?

+0

http://stackoverflow.com/questions/8638621/jquery-svg-why-cant-i-addclass – epascarello

+0

Did not le risposte fornite lavorare per voi? – dsharew

risposta

18

non si può chiamare .removeClass() su uno SVG, purtroppo.

Utilizzare .attr().

$('.someClass').attr('class',''); 

fonti aggiuntive:

Martin Wolf

Similar SO Question

+8

Questo, ovviamente, rimuoverà ** tutte ** le classi. Che va bene per il quotato HTML, ma ... –

+0

Puoi usare il [modulo di 'attr' che accetta una funzione] (http://api.jquery.com/attr/#attr-attributeName-function) come secondo argomento. Questo ti darebbe il vecchio valore e potresti fare un 'replaceAll()' per rimuoverlo. – GJK

+0

Volevo solo aggiungere a questo c'è attualmente un [PR in jquery per cambiare removeClass quindi questo non sarà un problema.] (Https://github.com/jquery/jquery/pull/2465) – aug

7

Questo ($('.someClass').attr('class','');) cancellerà tutte le classi di tutti gli elementi con class someClass.


Questo dovrebbe fare il trucco (conserva altre classi):

$(".someClass").each(function(){ 

    var classes = $(this).attr("class").split(" "); 
    var otherClasses = ""; 
    for(var i = 0; i<classes.length; ++i){ 
     if(classes[i] !== "someClass"){ 
      otherClasses += classes[i] + " "; 
     } 
    } 

    $(this).attr("class",otherClasses); 

}); 

Grazie @xehpuk per i suoi commenti.

+1

Questo non conservare altre classi, ad es "SomeClass2". – xehpuk

+0

hmm sì ma meglio di '$ ('. SomeClass'). Attr ('classe', '');' – dsharew

+0

Come circa la risposta aggiornata – dsharew

4

È possibile utilizzare removeAttr, che troverà tutti gli elementi corrispondenti e rimuoverà l'attributo specificato.
Nel tuo caso questo codice troverà tutti gli elementi con classe someClass e rimuoverà l'attributo class.
E il bene in questo codice è che non lascerà un attributo vuoto.

$('.someClass').removeAttr("class"); 
+2

Per il caso specifico, penso che questo sia in realtà più corretto della risposta con i molti upvotes perché lascerà un attributo vuoto ... – Shikkediel

+0

E cosa accadrebbe se l'elemento avesse più di una classe? –

+0

@YoannAugen in questo caso questa risposta non è consigliabile, ma soddisfa questa domanda. – chriz

Problemi correlati