jQuery가 태그 이름을 제공 할 수 있습니까?


115

동일한 클래스를 가진 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"로 표시되는 요소의 태그 이름을 어떻게 찾을 수 있는지에 대한 아이디어가 있습니까?


1
어쩌면 답은 여기에 있습니다 : stackoverflow.com/a/8355251/271103
하칸 KOSE

답변:


110
$(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString());

해야한다

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

18
HTML 문서의 대부분의 DOM 표현은 자동으로 nodeName을 대문자로 표시하므로 this.nodeName.toLowerCase ()를 사용해야합니다.
NickFitz

this.nodeName과 this.tagName이 모두 나를 위해 작동하는 것 같습니다. 모두 감사합니다!
BigPigVT

5
nodeName을 언급하면 ​​+1. 때때로, jQuery를 한 단계가 너무 멀리 :-)
서지 Wautier

2
+1 jQuery is ()는 작업을 수행하지 않습니다. h1, h2 등의 경우 is ()를 사용하는 경우 처리해야하는 6 가지 다른 경우가 있기 때문입니다.
Konstantin Dinev

166

이것을 시도해 볼 수 있습니다.

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

is ()에 대한 자세한 내용은 문서 를 참조하십시오 .


12
우려 할 수있는 대상 : 내 답변에 반대하는 경우 이유를 알려 주시면 개선하고 향후 SO- 답변에 대해 배울 수 있습니다. 감사.
middus

3
나도 싫어. 어쨌든 나는 nodeName브라우저에 따라 대문자인지 아닌 문자열을 반환 하기 때문에 upvoted했습니다 .
Marcel Falliere 2011

2
다음을 가정하십시오. 가능한 태그의 일부만 선택할 수있는 것이 아니라 100 개 이상의 html 태그 중 하나 일 수 있습니다. 그런 다음 $ (this) .is ( 'sometag')를 100 번 이상 작성해야합니다. 나는 이것이 어떤 사람들이 당신의 대답을 반대하는 이유라고 생각합니다.
ximi 2011 년

와우 ... is('*')몇 년 동안 본 적이 없습니다 . 아마도 OP에 응답하지 않을 것이지만 그것은 나를 위해 일했습니다, 감사합니다, @middus!
Alastair

53

이 질문을 전에 한 번 쳤고 내 경우에는 도움이되지 않았기 때문에 (는 this없었지만 대신 jQuery 선택기 인스턴스가있었습니다). 호출 get()하면 nodeName위에서 언급 한 것처럼 HTML 요소를 얻을 수 있습니다 .

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

1
페이지의 첫 번째 유용한 정보
Rooster

47

$(this).prop('tagName');jQuery 1.6 이상을 사용 하는 경우 에도 사용할 수 있습니다 .


이것이 바로 내가 필요한 것입니다. 내 디자인에서는 jquery 요소가 편리했지만 원래 HTML DOM 요소는 없었습니다. 이것은 나를 위해 작동합니다.
Gilthans

나는 이것이이 질문의 주제에 대한 정확한 답이라고 생각합니다.
CodeTweetie 2013 년


1

nodeNamenodeName은 DOM 속성이고 jQuery 자체에는 nodeName함수 나 속성 이 없기 때문에 jQuery에서 사용할 수 없다고 생각합니다 . 그러나이 문제에 대해 처음 언급 한 응답자를 기반으로하면 nodeName다음과 같이 문제를 해결할 수있었습니다.

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

참고 : this여기에 jQuery 객체가 있습니다.


0

이것은 jquery tagname first child 를 쿼리로 사용하여 Google에서 제공하는 질문이므로 다른 예제를 게시하겠습니다.

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

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

jquery 결과는 (대문자) 태그 이름입니다. P


0

전체 페이지에서 HTML 요소 태그 이름을 얻을 수 있습니다.

다음을 사용할 수 있습니다.

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

0
you can try:
jQuery(this).get(0).tagName;
or
jQuery(this).get(0).nodeName;

참고 : 이것을 선택기 (h1, h3 또는 ...)로 바꾸십시오.


0

나는 단지 다른 문제를 위해 그것을 썼고 그것이 당신에게도 도움이 될 것이라고 생각했습니다.

용법:

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

출력 예 :html > body > div#coreApp > div#productpage > div#productpage-wrapper > div > div > div > div > div#pthumb12 > form#thumb_uploader_src > input
Chris S.

다른 사용 예 : $('*').each(function(_i,_e){$(_e).attr('title',_DOM_Trackr(_e,true));});
Chris S.

0

문제를 해결하는 가장 좋은 방법 $(this).attr("tag")this.nodeName.toLowerCase()또는 로 교체 하는 것 this.tagName.toLowerCase()입니다.

둘 다 똑같은 결과를 생성합니다!


0

빠른 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)...*/ });

0

대신 다음을 수행하십시오.

$(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()); 
  });
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.