jQuery 可以提供标签名称吗?

IT技术 javascript jquery
2021-01-26 08:43:57

我在 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>

现在我想运行这样的东西来确保我的元素都有一个 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”表示的元素的标签名称的任何想法?

6个回答

你可以试试这个:

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

有关is() 的更多信息,请参阅文档

我也讨厌。无论如何,我投票是因为nodeName返回一个字符串,该字符串取决于浏览器是否大写。
2021-03-14 08:43:57
假设以下情况:您不仅可以选择一小部分可能的标签,还可以是 100 多个 html 标签中的任何一个。然后你需要写: $(this).is('sometag') a 100+ 次。我想这就是为什么有些人不赞成你的答案。
2021-03-26 08:43:57
它可能关注的对象:如果您不赞成我的答案,请告诉我原因,以便我可以改进它并为将来的 SO 答案学习。谢谢。
2021-04-05 08:43:57
哇……好is('*')多年没见了。它可能不会回答 OP,但它对我有用,谢谢,@middus!
2021-04-08 08:43:57
$(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString());

应该

$(this).attr("id", "rnd" + this.nodeName.toLowerCase() + "_" + i.toString());
+1 提及节点名称。有时,jQuery 走得太远了 :-)
2021-03-19 08:43:57
+1 jQuery is() 不能完成这项工作,因为在 h1、h2 等情况下,如果使用 is(),您必须处理 6 种不同的情况。
2021-03-20 08:43:57
this.nodeName 和 this.tagName 似乎都适合我。谢谢大家!
2021-03-30 08:43:57
您需要使用 this.nodeName.toLowerCase(),因为大多数 HTML 文档的 DOM 表示会自动将 nodeName 大写。
2021-04-03 08:43:57

因为我之前遇到过这个问题,但在我的情况下它对我没有帮助(我没有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
页面上的第一个有用的
2021-04-07 08:43:57

$(this).prop('tagName');如果您使用 jQuery 1.6 或更高版本,可以使用。

这正是我所需要的。在我的设计中,我使用了 jquery 元素,但没有使用原始的 HTML DOM 元素。这对我有用。
2021-03-14 08:43:57
我认为这是回答这个问题的确切答案。
2021-04-07 08:43:57

是的。您可以使用以下代码:

this.tagName