¿Puede jQuery proporcionar el nombre de la etiqueta?

Tengo varios elementos en una página HTML que tienen la misma clase, pero son tipos de elementos diferentes. Quiero averiguar el nombre de la etiqueta del elemento cuando hago un bucle sobre ellos, pero .attr no toma “tag” o “tagname”.

Esto es lo que quiero decir. Considera estos elementos en una página:

First

Second

Third

Fourth

Ahora quiero ejecutar algo como esto para asegurarme de que todos mis elementos tengan una identificación si aún no se ha definido uno:

 $(function() { $(".rnd").each(function(i) { var id = $(this).attr("id"); if (id === undefined || id.length === 0) { // this is the line that's giving me problems. // .attr("tag") returns undefined $(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString()); } }); }); 

El resultado que me gustaría es que los elementos H2 y H4 tengan una identificación de

 rndh2_1 rndh4_3 

respectivamente.

¿Alguna idea sobre cómo puedo descubrir el nombre de la etiqueta del elemento representado por “esto”?

 $(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString()); 

debiera ser

 $(this).attr("id", "rnd" + this.nodeName.toLowerCase() + "_" + i.toString()); 

Puedes intentar esto:

 if($(this).is('h1')){ doStuff(); } 

Consulte los documentos para obtener más información sobre ().

Ya que hice esta pregunta una vez y no me ayudó en mi caso (no tenía this , pero tenía una instancia de selector jQuery). Al llamar a get() obtendrá el elemento HTML, mediante el cual puede obtener el nodeName como se mencionó anteriormente.

 this.nodeName; // In a event handler, 'this' is usually the element the event is called on 

o

 $('.hello:first-child').get(0).nodeName; // Use 'get' or simply access the jQuery Object like an array $('.hello:first-child')[0].nodeName; // will get you the original DOM element object 

También podría usar $(this).prop('tagName'); si está utilizando jQuery 1.6 o superior.

Sí. Puede usar el siguiente código:

 this.tagName 

Creo que no puede usar nodeName en jQuery ya que nodeName es una propiedad DOM y jQuery en sí mismo no tiene una propiedad o función nodeName . Pero de acuerdo con el encuestado que mencionó por primera vez sobre este asunto de nombre de nodeName , así es como pude resolver el problema:

 this.attr("id", "rnd" + this.attr("nodeName") + "_" + i.toString()); 

NOTA: this aquí es un objeto jQuery.

Dado que esta es una pregunta que usted hace en google usando jquery tagname first child como una consulta, publicaré otro ejemplo:

 

Some text, whatever

$('div').children(':first-child').get(0).tagName); // ...and not $('div:first-child')[...]

El resultado de jquery es un nombre de etiqueta (mayúscula): P

Puede obtener el nombre de la etiqueta del elemento html en toda la página.

Podrías usar:

  $('body').contents().on("click",function () { var string = this.tagName; alert(string); }); 
 you can try: jQuery(this).get(0).tagName; or jQuery(this).get(0).nodeName; 

nota: reemplace esto con su selector (h1, h3 o …)

Solo lo escribí para otro tema y pensé que podría ayudar a cualquiera de ustedes también.

Uso:

  • es decir, onclick="_DOM_Trackr(this);"

Parámetros:

  1. DOM-Object para rastrear
  2. interruptor de retorno / alerta (opcional, predeterminado = alerta)

Código fuente:

 function _DOM_Trackr(_elem,retn=false) { var pathTrackr=''; var $self=$(_elem).get(0); while($self && $self.tagName) { var $id=($($self).attr("id"))?('#'+$($self).attr("id")):''; var $nName=$self.tagName; pathTrackr=($nName.toLowerCase())+$id+((pathTrackr=='')?'':' > '+(pathTrackr)); $self=$($self).parent().get(0); } if (retn) { return pathTrackr; } else { alert(pathTrackr); } } 

La mejor manera de solucionar su problema es reemplazar $(this).attr("tag") con this.nodeName.toLowerCase() o this.tagName.toLowerCase() .

¡Ambos producen exactamente el mismo resultado!

Considere el rápido método FILTER :

 $('.rnd').filter('h2,h4') 

devoluciones:

 [

​Second​

​,

​Fourth​

​]

asi que:

 $('.rnd').filter('h2,h4').each(function() { /*...$(this)...*/ }); 

En lugar de hacer simplemente:

 $(function() { $(".rnd").each(function(i) { var id = $(this).attr("id"); if (id === undefined || id.length === 0) { // this is the line that's giving me problems. // .attr("tag") returns undefined // change the below line... $(this).attr("id", "rnd" + this.tagName.toLowerCase() + "_" + i.toString()); }); });