jQuery能否提供标签名称?

我有一个HTML页面上的几个元素具有相同的类 – 但他们是不同的元素types。 我想找出元素的标签名称,因为我循环它们 – 但.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> 

现在我想运行这样的事情,以确保我的元素都有一个ID如果还没有定义:

 $(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元素将有一个id

 rndh2_1 rndh4_3 

分别。

关于如何发现由“this”表示的元素的标签名称的任何想法?

 $(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 ,而是有一个jQueryselect器实例)。 调用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 

我认为你不能在jQuery中使用nodeName ,因为nodeName是一个DOM属性,jQuery本身没有nodeName函数或属性。 但是基于最初提到的这个nodeName的回应者,这就是我能够解决问题的方法:

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

注意:这里是一个jQuery对象。

由于这是一个问题,你一起谷歌使用jQuery的标记名第一个孩子作为查询我会张贴另一个例子:

 <div><p>Some text, whatever</p></div> $('div').children(':first-child').get(0).tagName); // ...and not $('div:first-child')[...] 

jQuery结果是一个(大写)标记名: P

您可以在整个页面上获取html元素标签名称。

你可以使用:

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

注意:用你的select器(h1,h3或…)

我只是写了另一个问题,并认为它可以帮助你们任何一个。

用法:

  • 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); } } 

解决问题的最好方法是用this.nodeName.toLowerCase()this.tagName.toLowerCase()replace$(this).attr("tag") this.tagName.toLowerCase()

两者都产生完全相同的结果!

考虑快速的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)...*/ }); 

而是简单地做:

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