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);"
参数:
- 要跟踪的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); } }
解决问题的最好方法是用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()); }); });