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
Hakan 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 2009年

5
nodeNameについて言及する場合は+1。場合によっては、jQueryが一歩遠すぎることがあります:-)
Serge Wautier

2
+1 jQuery is()は、h1、h2などの場合にis()を使用する場合に処理する必要のある6つの異なるケースがあるため、機能しません。
Konstantin Dinev

166

あなたはこれを試すことができます:

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

is()の詳細については、ドキュメントを参照してください。


12
それが関係する可能性のある人:私の回答に反対票を投じた場合は、理由を教えてください。そうすれば、私はそれを改善し、将来のSO回答について学ぶことができます。ありがとう。
middus、2011

3
私も嫌いです。とにかくnodeName、ブラウザによっては大文字かどうかに関係なく文字列を返すため、私は賛成票を投じました。
Marcel Falliere、2011

2
次のように想定します。可能なタグの選択範囲が少ないだけでなく、100以上のHTMLタグのいずれかである可能性があります。次に、$(this).is( 'sometag')を100回以上書く必要があります。これが、一部の人々があなたの回答に反対票を投じた理由だと思います。
ximi

うわー... is('*')何年も見たことがない。おそらくOPには応答しませんが、@ middusのおかげでうまくいきました。
Alastair 2013年

53

私は以前にこの質問に出たことがあり、私の場合は役に立ちませんでした(私に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

1
ページで最初に役立つもの
Rooster

47

$(this).prop('tagName');jQuery 1.6以降を使用している場合にも使用 できます。


これはまさに私が必要としたものです。私の設計では、jquery要素は便利でしたが、元のHTML DOM要素はありませんでした。これは私にとってはうまくいきます。
Gilthans

これはこの質問の主題に答える正確な答えだと思います。
CodeTweetie 2013年


1

nodeNamenodeNameはDOMプロパティであり、jQuery自体にはnodeName関数もプロパティもないので、jQuery ではinを使用できないと思います。しかしnodeName、このことについて最初に言及した回答者に基づいて、これは私が問題を解決することができた方法です:

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

注:これthisはjQueryオブジェクトです。


0

これは、jquery tagname first childをクエリとして使用してグーグルで出てくる質問なので、別の例を投稿します。

<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. return / alertスイッチ(オプション、デフォルト=アラート)

ソースコード:

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.