Ottieni il nome della classe usando jQuery


603

Voglio ottenere il nome della classe usando jQuery

E se ha un ID

<div class="myclass"></div>

2
@Amarghosh: vero, vero, ma potresti davvero entrare in questa situazione, se usi metodi di attraversamento come parents().
Boldewyn l'

8
Fyi this.classNamefunziona senza jquery (tornerebbe "myclass"nell'esempio sopra)
Peter Berg

Risposte:


1062

Dopo aver ottenuto l'elemento come oggetto jQuery con mezzi diversi dalla sua classe, quindi

var className = $('#sidebar div:eq(14)').attr('class');

dovrebbe fare il trucco. Per l'uso dell'ID .attr('id').

Se ti trovi all'interno di un gestore eventi o di un altro metodo jQuery, in cui l'elemento è il nodo DOM puro senza wrapper, puoi utilizzare:

this.className // for classes, and
this.id // for IDs

Entrambi sono metodi DOM standard e ben supportati in tutti i browser.


7
e se è un ID var IDName = $ ('# id'). attr ('id');
X10nD

18
Come sottolinea sandino nella sua risposta, c'è sempre la possibilità che venga impostato più di un nome di classe. (ad esempio JQuery-UI aggiunge classi helper ovunque). Puoi sempre verificarlo usando if(className.indexOf(' ') !== -1){throw new Error('Uh-oh! More than one class name!');}
Potherca l'

17
Se la usi .attr('class')e la combini, if(className.indexOf('Class_I_am_Looking_For') > = 0)puoi facilmente verificare l'esistenza di una classe specifica e gestire comunque più classi.
RonnBlack,

18
RonnBlack: if(className.indexOf('Class_I_am_Looking_For') > = 0)sarà anche corrispondere"This_Is_Not_the_Class_I_am_Looking_For"
Leif Neland

1
@BenRacicot in quel caso, usa semplicemente i metodi DOM standard .
Boldewyn,

227

È meglio usare .hasClass()quando si desidera verificare se un elemento ha un particolare class. Questo perché quando un elemento ha multipli classnon è banale da controllare.

Esempio:

<div id='test' class='main divhover'></div>

Dove:

$('#test').attr('class');        // returns `main divhover`.

Con .hasClass()possiamo verificare se divha la classe divhover.

$('#test').hasClass('divhover'); // returns true
$('#test').hasClass('main');     // returns true

13
E se non conoscessi il nome della classe? ;-)
Potherca,

10
esatto ... questo è utile solo se conosci il nome della classe che stai controllando ... ma il mio commento è stato per avvisarti di non usare .attr ('class') == 'CLASSNAME_YOU_ARE_SEARCHING' per verificare se un elemento dom ha qualche classe invece è meglio usare .hasClass
sandino il

4
Un altro modo è quello di usare.is('.divhover')
orad

È possibile eseguire il loop su classi di un elemento?
Fractaliste

3
Sì, è solo $ (element) .attr ("class"). Split (''); e ottieni un elenco, quindi usa semplicemente un ciclo for o foreach
sandino,

38

Stai attento, forse, hai una classe e una sottoclasse.

  <div id='id' class='myclass mysubclass' >dfdfdfsdfds</div>

Se usi soluzioni precedenti, avrai:

myclass mysubclass

Quindi se vuoi avere il selettore di classe , procedi come segue:

var className = '.'+$('#id').attr('class').split(' ').join('.')

e tu avrai

.myclass.mysubclass

Ora se vuoi selezionare tutti gli elementi che hanno la stessa classe come div sopra:

   var brothers=$('.'+$('#id').attr('class').split(' ').join('.'))

questo significa

var brothers=$('.myclass.mysubclass')

Aggiornamento 2018

O può essere implementato con javascript alla vaniglia in 2 righe:

  const { classList } = document.querySelector('#id');
  document.querySelectorAll(`.${Array.from(classList).join('.')}`);

6
Potrebbe esserci più di uno spazio tra le classi. Variante più corretta var className = '.' + $ ('# Id'). Attr ('class'). Sostituisci (/ + (? =) / G, ''). Split ('') .join ('. ')
Suhan,

3
Un'espressione ancora più corretta è '.'+$('#id').attr('class').split(/[ \n\r\t\f]+/).join('.'), perché spazio, Tab, LF, CR e FF sono autorizzati a separare le classi. ( .split()accetta anche RegExps.)
Boldewyn

'.'+$('#id').attr('class').split(/\s+/).join('.')sarebbe più conciso, no? O corrisponderebbe a qualcosa a cui non sto pensando?
LostHisMind

1
Per essere sicuri e non ottenere alcun punto finale, con una di queste soluzioni, aggiungi un taglio come questo.attr('class').trim().split(...)
Christian Lavallee

28

Questo per ottenere la seconda classe in più classi usando in un elemento

var class_name = $('#videobuttonChange').attr('class').split(' ')[1];


11

Se hai <div>un id:

​<div id="test" class="my-custom-class"></div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

...Puoi provare:

var yourClass = $("#test").prop("class");

Se hai <div>solo un class, puoi provare:

var yourClass = $(".my-custom-class").prop("class");

6

Se utilizzerai la funzione split per estrarre i nomi delle classi, dovrai compensare potenziali variazioni di formattazione che potrebbero produrre risultati imprevisti. Per esempio:

" myclass1  myclass2 ".split(' ').join(".")

produce

".myclass1..myclass2."

Penso che stai meglio usando un'espressione regolare da abbinare a un set di caratteri consentiti per i nomi delle classi. Per esempio:

" myclass1  myclass2  ".match(/[\d\w-_]+/g);

produce

["myclass1", "myclass2"]

L'espressione regolare probabilmente non è completa, ma spero che tu capisca il mio punto. Questo approccio mitiga la possibilità di una formattazione scadente.


6

Per completare la risposta di Whitestock (che è la migliore che ho trovato) ho fatto:

className = $(this).attr('class').match(/[\d\w-_]+/g);
className = '.' + className.join(' .');

Quindi per "myclass1 myclass2" il risultato sarà '.myclass1 .myclass2'


5

Puoi ottenere il nome della classe in due modi:

var className = $('.myclass').attr('class');

O

var className = $('.myclass').prop('class');

5
<div id="elem" class="className"></div>

Con Javascript

document.getElementById('elem').className;

Con jQuery

$('#elem').attr('class');

O

$('#elem').get(0).className;

2

Se non conosci il nome della classe MA conosci l'ID puoi provare questo:

<div id="currentST" class="myclass"></div>

Quindi chiamalo usando:

alert($('#currentST').attr('class'));

2

Se si desidera ottenere classi di div e quindi verificare se esiste una classe, utilizzare semplicemente.

if ( $('#div-id' ).hasClass( 'classname' ) ) {
    // do something...
}

per esempio;

if ( $('body').hasClass( 'home' ) ) {
    $('#menu-item-4').addClass('active');
}

2

Provalo

HTML

<div class="class_area-1">
    area 1
</div>

<div class="class_area-2">
    area 2
</div>

<div class="class_area-3">
    area 3
</div>

jQuery

<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="application/javascript">
    $('div').click(function(){
        alert($(this).attr('class'));
    });
</script>

0

se abbiamo single o vogliamo il primo divelemento che possiamo usare

$('div')[0].classNamealtrimenti abbiamo bisogno di uno iddi quell'elemento


0

Se abbiamo un codice:

<div id="myDiv" class="myClass myClass2"></div> 

per prendere il nome della classe usando jQuery potremmo definire e usare un semplice metodo plugin:

$.fn.class = function(){
  return Array.prototype.slice.call( $(this)[0].classList );
}

o

 $.fn.class = function(){
   return $(this).prop('class');
 } 

L'uso del metodo sarà:

$('#myDiv').class();

Dobbiamo notare che restituirà un elenco di classi a differenza del metodo nativo element.className che restituisce solo la prima classe delle classi associate. Poiché spesso all'elemento è associata più di una classe, ti consiglio di non utilizzare questo metodo nativo ma element.classlist o il metodo sopra descritto.

La prima variante restituirà un elenco di classi come una matrice, la seconda come stringa - nomi di classi separati da spazi:

// [myClass, myClass2]
// "myClass myClass2"

Un altro avviso importante è che entrambi i metodi e il metodo jQuery

$('div').prop('class');

restituisce solo l'elenco di classi del primo elemento catturato dall'oggetto jQuery se utilizziamo un selettore più comune che punta a molti altri elementi. In tal caso, dobbiamo contrassegnare l'elemento, vogliamo ottenere le sue classi, usando un indice, ad es

$('div:eq(2)').prop('class');

Dipende anche da cosa devi fare con queste classi. Se vuoi solo cercare una classe nell'elenco delle classi dell'elemento con questo ID, dovresti semplicemente usare il metodo "hasClass":

if($('#myDiv').hasClass('myClass')){
   // do something
}

come menzionato nei commenti sopra. Ma se potresti aver bisogno di prendere tutte le classi come selettore, usa questo codice:

$.fn.classes = function(){
   var o = $(this);
   return o.prop('class')? [''].concat( o.prop('class').split(' ') ).join('.') : '';
 } 

 var mySelector = $('#myDiv').classes();

Il risultato sarà:

// .myClass.myClass2

e potresti farlo per creare dinamicamente una specifica regola css di riscrittura per esempio.

Saluti



-1

Il modo migliore per ottenere il nome della classe in javascript o jquery

attr() La funzione attributo viene utilizzata per ottenere e impostare l'attributo.


Ottieni lezione

jQuery('your selector').attr('class');  // Return class

Verifica che la classe esista o meno

The hasClass() method checks if any of the selected elements have a specified class name.

 if(jQuery('selector').hasClass('abc-class')){
        // Yes Exist
    }else{
        // NOt exists
    }

Imposta classe

jQuery('your selector').attr('class','myclass');  // It will add class to your selector

Ottieni lezione al clic del pulsante usando jQuery

jQuery(document).on('click','button',function(){
     var myclass = jQuery('#selector').attr('class');
});

Aggiungi classe se il selettore non ha alcuna classe usando jQuery

if ( $('#div-id' ).hasClass( 'classname' ) ) {
        // Add your code
    }

Ottieni la seconda classe in più classi usando in un elemento

Change array position in place of [1] to get particular class.

var mysecondclass = $('#mydiv').attr('class').split(' ')[1];

-3

utilizzare in questo modo: -

$(".myclass").css("color","red");

se hai usato questa classe più di una volta, usa ciascun operatore

$(".myclass").each(function (index, value) {
//do you code
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.