0

假设有三个类

<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 构造函数包装它。

如果你想匹配模式类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 回答