2012-11-02 4 views
0

Предположим, что существует три классаJavascript получить имя класса

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

Я хочу, чтобы получить имя класса «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') 

поднимает вышеуказанную ошибку.

Может ли кто-нибудь объяснить, почему это произошло, и как я могу получить то, что хочу?

Благодаря

ответ

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|$)/); 
+2

или 'this.className'. – RobG

+0

@alex Можете ли вы уточнить, почему '/ (?:^| \ S) world_ \ d + (?:^| \ $) /' ([Который вообще не работает] (http://jsfiddle.net/ J22Ex /)), а не просто '/ world_ \ d + /'? – Engineer

+0

@Engineer Это огромная неудача от моего имени. Я исправлю это. – alex

1

попробовать

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

Что происходит в том, что функция JQuery each устанавливает this быть DOM элемент, и не «prewrap» обертки jquery вокруг этого элемента.

Так, как сказал alex, просто обертывание его снова даст вам желание, которое вы хотите.

0

Чтобы получить только имена world_ класса, вам нужно сделать строку заменить и удалить пробельные с помощью $ .trim:

$('.hello').each(function(){ 
    $.trim($(this).attr('class').replace('hello', '')); 
}); 
Смежные вопросы