Obter nome da classe usando jQuery

603

Eu quero obter o nome da classe usando jQuery

E se tiver um id

<div class="myclass"></div>
X10nD
fonte
2
@Amarghosh: Verdade, verdade, mas você pode realmente entrar nessa situação, se usar alguns métodos transversais, como parents().
Boldewyn
8
fyi this.classNamefunciona sem jquery (voltaria "myclass"no exemplo acima)
Peter Berg

Respostas:

1062

Depois de obter o elemento como objeto jQuery por outros meios que não sua classe, então

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

deve fazer o truque. Para o uso do ID .attr('id').

Se você estiver dentro de um manipulador de eventos ou outro método jQuery, em que o elemento é o nó DOM puro sem wrapper, poderá usar:

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

Ambos são métodos DOM padrão e são bem suportados em todos os navegadores.

Boldewyn
fonte
7
e se for um ID var IDName = $ ('# id'). attr ('id');
X10nD
18
Como sandino aponta em sua resposta, sempre existe a chance de definir mais de um nome de classe. (por exemplo, a JQuery-UI adiciona classes auxiliares por todo o lugar). Você pode sempre verificado para isso usando if(className.indexOf(' ') !== -1){throw new Error('Uh-oh! More than one class name!');}
Potherca
17
Se você alavancar .attr('class')e combiná- if(className.indexOf('Class_I_am_Looking_For') > = 0)lo, poderá verificar facilmente a existência de uma classe específica e ainda lidar com várias classes.
RonnBlack
18
RonnBlack: if(className.indexOf('Class_I_am_Looking_For') > = 0)também irá corresponder"This_Is_Not_the_Class_I_am_Looking_For"
Leif Neland
1
@BenRacicot nesse caso, basta usar métodos DOM padrão .
Boldewyn
227

É melhor usar .hasClass()quando você deseja verificar se um elemento tem um determinado class. Isso ocorre porque quando um elemento tem vários class, não é trivial verificar.

Exemplo:

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

Onde:

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

Com .hasClass()podemos testar se o divtem a classe divhover.

$('#test').hasClass('divhover'); // returns true
$('#test').hasClass('main');     // returns true
sandino
fonte
13
Mas e se você não souber o nome da classe? ;-)
Potherca
10
isso mesmo ... isso só é útil se você souber o nome da classe que está verificando ... mas meu comentário foi para alertá-lo para não usar .attr ('class') == 'CLASSNAME_YOU_ARE_SEARCHING' para verificar se um elemento dom tem algum classe em vez disso, é melhor usar .hasClass
sandino
4
Outra maneira é usar.is('.divhover')
12/12/12
É possível fazer um loop sobre as classes de um elemento?
Fractaliste 03/03
3
Sim, é só fazer $ (elemento). Attr ("classe"). Split (''); e você terá uma lista, em seguida, basta usar um favor ou loop foreach
sandino
38

Cuidado, talvez você tenha uma classe e uma subclasse.

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

Se você usar soluções anteriores, terá:

myclass mysubclass

Portanto, se você deseja ter o seletor de classe , faça o seguinte:

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

e você terá

.myclass.mysubclass

Agora, se você deseja selecionar todos os elementos que possuem a mesma classe, como div acima:

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

que significa

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

Atualização 2018

OR pode ser implementado com javascript vanilla em 2 linhas:

  const { classList } = document.querySelector('#id');
  document.querySelectorAll(`.${Array.from(classList).join('.')}`);
Abdennour TOUMI
fonte
6
Pode haver mais de um espaço entre as classes. Variante mais correta var className = '.' + $ ('# Id'). Attr ('class'). Replace (/ + (? =) / G, ''). Split ('') .join ('. ')
Suhan
3
Uma expressão ainda mais correta é '.'+$('#id').attr('class').split(/[ \n\r\t\f]+/).join('.')porque espaço, Tab, LF, CR e FF podem separar classes. ( .split()Também aceita expressões regulares.)
Boldewyn
'.'+$('#id').attr('class').split(/\s+/).join('.')seria mais conciso, não seria? Ou seria algo que eu não estou pensando?
LostHisMind
1
Para ser seguro e não obter qualquer ponto final, com qualquer uma dessas soluções, adicione uma guarnição como esta.attr('class').trim().split(...)
Lavallee Christian
28

Isso é para obter a segunda classe em várias classes usando em um elemento

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

você pode simplesmente usar,

var className = $('#id').attr('class');

Madura Harshana
fonte
11

Se você <div>possui id:

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

...podes tentar:

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

Se o seu <div>tiver apenas um class, você pode tentar:

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

Se você usar a função de divisão para extrair os nomes das classes, precisará compensar possíveis variações de formatação que possam produzir resultados inesperados. Por exemplo:

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

produz

".myclass1..myclass2."

Acho melhor você usar uma expressão regular para corresponder ao conjunto de caracteres permitidos para nomes de classe. Por exemplo:

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

produz

["myclass1", "myclass2"]

A expressão regular provavelmente não está completa, mas espero que você entenda meu argumento. Essa abordagem atenua a possibilidade de formatação incorreta.

Whitestock
fonte
6

Para completar a resposta do Whitestock (que foi a melhor que encontrei), fiz:

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

Portanto, para "minhaclasse1 minhaclasse2", o resultado será '.myclass1 .myclass2'

Paul Leclercq
fonte
5

Você pode obter o nome da classe de duas maneiras:

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

OU

var className = $('.myclass').prop('class');
Sadikhasan
fonte
5
<div id="elem" class="className"></div>

Com Javascript

document.getElementById('elem').className;

Com jQuery

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

OU

$('#elem').get(0).className;
Bilal Iqbal
fonte
2

Se você não souber o nome da classe, MAS você souber o ID, poderá tentar o seguinte:

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

Em seguida, chame-o usando:

alert($('#currentST').attr('class'));
Leroy Gumede
fonte
2

Se você deseja obter classes de div e depois verificar se existe alguma classe, use simples.

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

por exemplo;

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

Tente

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>
Jay Zalavadiya
fonte
0

se temos único ou queremos primeiro divelemento, podemos usar

$('div')[0].classNamecaso contrário, precisamos de um iddesse elemento

arunkumar talla
fonte
0

Se tivermos um código:

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

para pegar o nome da classe usando jQuery, poderíamos definir e usar um método simples de plug-in:

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

ou

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

O uso do método será:

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

Temos que notar que ele retornará uma lista de classes, diferente do método nativo element.className, que retorna apenas a primeira classe das classes anexadas. Como geralmente o elemento possui mais de uma classe, recomendamos que você não use esse método nativo, mas o element.classlist ou o método descrito acima.

A primeira variante retornará uma lista de classes como uma matriz, a segunda como uma string - nomes de classes separados por espaços:

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

Outro aviso importante é que tanto os métodos quanto o método jQuery

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

retorne apenas a lista de classes do primeiro elemento capturado pelo objeto jQuery se usarmos um seletor mais comum que aponte muitos outros elementos. Nesse caso, temos que marcar o elemento, queremos obter as classes dele, usando algum índice, por exemplo

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

Depende também do que você precisa fazer com essas classes. Se você quiser apenas verificar uma classe na lista de classes do elemento com esse ID, use o método "hasClass":

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

como mencionado nos comentários acima. Mas se você precisar ter todas as classes como seletor, use este código:

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

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

O resultado será:

// .myClass.myClass2

e você pode criar dinamicamente uma regra específica de reescrita css, por exemplo.

Saudações

Christiyan
fonte
0

Isso também funciona.

const $el = $(".myclass");
const className = $el[0].className;
Adrian Bartholomew
fonte
-1

Melhor maneira de obter o nome da classe em javascript ou jquery

attr() A função attribute é usada para obter e definir o atributo.


Obter classe

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

Verifique se a classe existe ou não

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
    }

Definir classe

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

Obter turma ao clicar no botão usando jQuery

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

Adicione classe se o seletor não tiver nenhuma classe usando jQuery

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

Obter a segunda classe em várias classes usando em um elemento

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

var mysecondclass = $('#mydiv').attr('class').split(' ')[1];
Mayank Dudakiya
fonte
-3

use assim: -

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

se você usou essa classe mais de uma vez, use cada operador

$(".myclass").each(function (index, value) {
//do you code
}
Srujal Patel
fonte