Ottieni il tipo di elemento con jQuery


308

È possibile, utilizzando jQuery, scoprire il tipo di un elemento con jQuery? Ad esempio, l'elemento è div, span, select o input?

Ad esempio, se sto provando a caricare i valori in un elenco a discesa con jQuery, ma lo stesso script può generare codice in una serie di pulsanti di opzione, posso creare qualcosa di simile:

$('.trigger').live('click', function () {
   var elementType = $(this).prev().attr(WHAT IS IT);
});

Dato un elenco a discesa con un pulsante accanto ad esso con la classe trigger , la mia elementTypevariabile dovrebbe tornare al selectmomento della pressione del pulsante.


Puoi riformulare? cosa intendi per tipo di elemento?
Abdul Munim,


Risposte:


558

Ottenere l'elemento digita nel modo jQuery:

var elementType = $(this).prev().prop('nodeName');

fare lo stesso senza jQuery

var elementType = this.previousSibling.nodeName;

Verifica del tipo di elemento specifico:

var is_element_input = $(this).prev().is("input"); //true or false

16
Ricorda solo che la funzione .prop () è stata aggiunta solo in jQuery 1.6 - potrebbe essere necessario aggiornare la versione che stai usando!
xgretsch,

Non ha funzionato con il vecchio jQuery 1.3.2, quindi aggiornato all'ultimo e ha funzionato bene.
Damodar Bashyal,

2
Questo potrebbe essere migliorato cambiando 'tagName' in 'nodeName' come menzionato qui .
Kyle Stoflet,

1
@KyleStoflet - vi pare hai ragione, nodeNamesono supportati da più tipi di elementi, e sostiene IE5.5 non dovrebbe essere più un problema, quindi non vedo nessun problema con il cambiamento tagNameper nodeNamela risposta di cui sopra. Entrambi funzioneranno bene per gli elementi, e quest'ultimo funzionerà anche su nodi di testo, attributi ecc.
adeneo,

3
Funziona ma sono stato un po 'confuso da prev (), che è specifico per il codice di esempio in questione. Fondamentalmente,$(this).is("input");
Fanky

56

inoltre puoi usare:

$("#elementId").get(0).tagName

26

dovresti usare la tagNameproprietà e attr('type')per gli input


Un esempio renderebbe più forte questo commento.
Justapigeon,

16

Come ha accennato Distdev, è ancora necessario differenziare il tipo di input. Vale a dire

$(this).prev().prop('tagName');

te lo dirò input, ma ciò non distingue tra casella di controllo / testo / radio. Se si tratta di un input, è quindi possibile utilizzare

$('#elementId').attr('type');

per dirti checkbox / text / radio, così sai che tipo di controllo è.


9

puoi usare .is():

  $( "ul" ).click(function( event ) {
      var target = $( event.target );
      if ( target.is( "li" ) ) {
         target.css( "background-color", "red" );
      }
  });

vedi fonte



3

Usa Nodename su tagName:

nodeName contiene tutte le funzionalità di tagName, più alcune altre. Pertanto nodeName è sempre la scelta migliore.

vedi DOM Core

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.