0

3つのクラスがあるとします

<div class="hello world_1"></div>
<div class="hello world_2"></div>
<div class="hello world_3"></div>

「hello」からクラス名「world_1」「world_2」「world_3」を取得したい。コード:

$('.hello').each(function(){
  this.attr('class');
});

次のエラーが発生しました:

TypeError: Object #<HTMLDivElement> has no method 'attr'

少し実験してわかったこと

$('.hello:first').attr('class')

しながら働く

$('.hello')[0].attr('class')

上記のエラーが発生します。

なぜそれが起こったのか、どうすれば欲しいものを手に入れることができるのか、誰か説明できますか?

ありがとう

4

4 に答える 4

8

thisそのようにラップする必要があります...

$('.hello').each(function(){
  $(this).attr('class');
});

jQuery はthis、ネイティブ DOM 要素への参照として提供します。その上で jQuery メソッドを呼び出せるようにするには、jQuery コンストラクターでラップします。

pattern のクラスを一致させたい場合はworld_n、次を使用できます...

var matches = $(this).attr('class').match(/(?:^|\s)world_\d+(?:\s|$)/);
于 2012-11-02T06:09:32.410 に答える
1

試す

$('.hello').each(function(){
  $(this).attr('class');
});
于 2012-11-02T06:09:56.030 に答える
1

起こっていることは、jqueryeach関数がthisを DOM 要素に設定し、この要素の周りに jquery ラッパーを「事前ラップ」しないことです。

アレックスが言ったように、単にそれをもう一度ラップすると、あなたが望むようになります.

于 2012-11-02T06:11:46.577 に答える
0

クラス名のみを取得するworld_には、$.trim を使用して文字列の置換と空白の削除を行う必要があります。

$('.hello').each(function(){
  $.trim($(this).attr('class').replace('hello', ''));
});
于 2012-11-02T06:14:27.487 に答える