2011-11-14 13 views
2

は、例えばjqueryのjqueryの+のhtmlタグ

でいくつか作成されたタグを取得することが可能です:このコードで

$(function() { 
    $('a').click(function() { 
     var a = this.a; 
     var b = this.b; 
     var c = this.c; 
     $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 

<a href="#" a="txt" b="text" c="get">Info</a>

私が手:

a: undefined b: undefined c: undefined

答えて

1
$(function() { 
     $('a').click(function() { 
      var t = $(this); 
      var a = t.attr('a'); 
      var b = t.attr('b'); 
      var c = t.attr('c'); 
      $('.info').html("a:" + a + "b:" + b + "c:" + c); 
     }); 
    }); 
+1

jQueryの新しいインスタンスを3つ作成する理由は何ですか? .getAttributeを使用する – AutoSponge

+0

@AutoSponge彼は3つの新しいインスタンスを作成しておらず、1つ(t)を作成して再利用しています。 – Blazemonger

+3

コードが変更されました – AutoSponge

0

属性には.attr('a', value)を使用します。 this.a ... this.cは未定義です。

$(function() { 
    $('a').click(function() { 
    var a = $(this).attr('a'); 
    var b = $(this).attr('b'); 
    var c = $(this).attr('c'); 
    $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 
0

thisの範囲は、あなたが例えばjQueryのattr(name)メソッドを使用して、それらを「発見」しなければならないプロパティに直接それらを有効にする属性だけ認識していませんこのような属性:

$('a').attr('href') 

ここではドキュメントです:http://api.jquery.com/attr/

0

あなたが得ることができます:

0
$(function() { 
    $('a').click(function() { 
     var a = $(this).attr("a"); 
     var b = $(this).attr("b"); 
     var c = $(this).attr("c"); 
     $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 

デモhttp://jsfiddle.net/S4svg/

0

変更:

var a = this.a; 
    var b = this.b; 
    var c = this.c; 

へ:私は、我々は一度だけDOM要素を選択するのオーバーヘッドを処理する必要が$(this)セレクタをキャッシュされた

var $this = $(this), 
     a = $this.attr('a'), 
     b = $this.attr('b'), 
     c = $this.attr('c'); 

注意してください。 varキーワードを繰り返し使用するのではなく、変数宣言をコンマで連結しています。

また、data-attributesを使用して一意の名前を使用していることを確認することをお勧めします。だから、代わりに:

<a href="#" a="txt" b="text" c="get">Info</a> 

試してみてください。

<a href="#" data-a="txt" data-b="text" data-c="get">Info</a> 
4

あなたはこのためにgetAttribute()を使用する必要があります。

var a = this.getAttribute("a"); 
var b = this.getAttribute("b"); 
var c = this.getAttribute("c"); 

例:http://jsfiddle.net/xhBgr/

編集

私は、なぜ誰もが attr()を使用するためにあなたを語っているが、それはのgetAttribute(に比べ 非常には比較的高価である)(とjQueryオブジェクトに毎回 thisをラップしない)わからないんだけど、それはまったく同じことを

この状況ではgetAttributeとしてのこと。だから大多数の意見にもかかわらず、getAttribute()を使うべきです。

証明のベンチマークは次のとおりです。http://jsperf.com/attrvsget ChromeでgetAttributeメソッドを使用すると、パフォーマンスが2800%向上しました。

+0

私は、ブラウザ間の互換性がgetAttribute/hasAttribute(getattrの前にhasattrを使用することを示すMDN)の問題であるという印象を受けました。私は間違っていた? –

+1

@ChrisBiscardiこの場合、問題はありません。唯一の違いは、属性が存在しない場合はnullを返し、それ以外の場合は空の文字列を返すブラウザがあります。また、IEのいくつかの古いバージョンでは、getAttributeは 'style'属性と' onclick'属性で少し違って動作します。 – Paulpro