Может ли 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 или выше.
Я думаю, что вы не можете использовать 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);"
Параметры:
- DOM-объект для отслеживания
- переключатель возврата / оповещения (необязательно, по умолчанию = оповещение)
Исходный код:
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()
,
Оба дают одинаковый результат!