Может ли jQuery предоставить имя тега?

У меня есть несколько элементов на странице HTML, которые имеют один и тот же класс - но это разные типы элементов. Я хочу узнать имя тега элемента, когда я зацикливаюсь на них, но.attr не принимает "тег" или "тэг".

Вот что я имею в виду. Рассмотрим эти элементы на странице:

<h1 class="rnd">First</h1>
<h2 id="foo" class="rnd">Second</h2>
<h3 class="rnd">Third</h3>
<h4 id="bar" class="rnd">Fourth</h4>

Теперь я хочу запустить что-то вроде этого, чтобы убедиться, что все мои элементы имеют идентификатор, если он еще не определен:

$(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());
    }
  });
});

В результате я хотел бы, чтобы элементы H2 и H4 имели идентификатор

rndh2_1
rndh4_3

соответственно.

Любые идеи о том, как я могу найти имя тега элемента, представленного "это"?

13 ответов

Решение
$(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString());

должно быть

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

Вы можете попробовать это:

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

См. Документы для получения дополнительной информации о is().

Так как я задал этот вопрос один раз, и он не помог мне в моем случае (у меня не было this, но вместо этого был экземпляр селектора jQuery). призвание get() вы получите элемент HTML, с помощью которого вы можете получить nodeName как уже упоминалось выше.

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

или же

$('.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

Вы также можете использовать$(this).prop('tagName'); если вы используете JQuery 1.6 или выше.

Да. Вы можете использовать следующий код:

this.tagName

Я думаю, что вы не можете использовать nodeName в jQuery, так как nodeName является свойством DOM, а сам jQuery не имеет nodeName функция или свойство. Но на основе респондента, который впервые упомянул об этом nodeName Вот как я смог решить проблему:

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

НОТА: this вот объект jQuery.

Рассмотрим быстрый метод FILTER:

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

возвращает:

[<h2 id=​"foo" class=​"rnd">​Second​</h2>​, <h4 id=​"bar" class=​"rnd">​Fourth​</h4>​]

так:

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

Поскольку это вопрос, вы пришли в Google, используя тэг jquery first child в качестве запроса, я опубликую еще один пример:

<div><p>Some text, whatever</p></div>

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

Результатом jquery является (верхний регистр) тэг: P

Я только написал это для другого вопроса и подумал, что это может помочь любому из вас.

Использование:

  • т.е. onclick="_DOM_Trackr(this);"

Параметры:

  1. DOM-объект для отслеживания
  2. переключатель возврата / оповещения (необязательно, по умолчанию = оповещение)

Исходный код:

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);
    }
}
you can try:
jQuery(this).get(0).tagName;
or
jQuery(this).get(0).nodeName;

примечание: замените его своим селектором (h1, h3 или...)

Вы можете получить имя тега HTML-элемента на всей странице.

Вы можете использовать:

        $('body').contents().on("click",function () {
          var string = this.tagName;
          alert(string);
         });

Вместо этого просто сделайте:

$(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()); 
  });
});

Лучший способ решить вашу проблему - это заменить $(this).attr("tag") либо с this.nodeName.toLowerCase() или же this.tagName.toLowerCase(),

Оба дают одинаковый результат!

Другие вопросы по тегам