Поиск совпадающего имени класса в jQuery
У меня есть серия миниатюр изображений на странице. Они создаются с помощью css-спрайтов.
<div class="galleryImg1"></div>
<div class="galleryImg2 featured"></div>
<div class="galleryImg3"></div>
Я изначально использовал id="galleryImg1"
, но изменил его на использование class="galleryImg1"
, потому что изображения могут появляться в нескольких местах на одной странице, и я хотел избежать дублирования идентификаторов.
У меня есть селектор jQuery для присоединения событий щелчка ко всем этим классам.
$("[class^=galleryImg]").click(function() {
// how do i get 'galleryImg2' and '2' here?
}
Мне интересно, есть ли простой способ узнать имя класса, начиная с "galleryImg", на который был нажат. Должен ли я использовать регулярное выражение или есть способ "умнее"?
(да, если я использовал селектор #ID, тогда я мог просто сказать "this.id", но, как уже упоминалось, я не хочу использовать идентификаторы, потому что хочу отображать несколько копий одного и того же изображения.)
Ответы
Ответ 1
Насколько я знаю, вам понадобится довольно простое регулярное выражение, например:
$("[class^=galleryImg]").click(function(Event) {
var id = this.className.match(/galleryImg(\d+)/)[1];
console.log(id);
});
Если вы особенно противны этому, вы можете использовать что-то вроде этого, которое не будет проверяться, но будет Get Job Done.
<div class="galleryImg1" image_id="1"></div>
<div class="galleryImg2 featured" image_id="2"></div>
<div class="galleryImg3" image_id="3"></div>
<script>
$("[class^=galleryImg]").click(function(Event) {
var id = $(this).attr('image_id');
console.log(id);
});
</script>
Поскольку я предполагаю, что у вас есть полный контроль над вашим HTML, и вы знаете, что класс galleryImg всегда будет сопровождаться идентификатором, я не думаю, что регулярное выражение здесь вообще зла. Просто пойдите с ним!
Ответ 2
Что я делаю, это примерно так:
<div class="galleryImg 1"></div>
<div class="galleryImg 2 featured"></div>
<div class="galleryImg 3"></div>
<script>
$(".galleryImg").click(function(Event) {
var Class = $(this).attr('class').split(" ");
var id = Class[1]
});
</script>
Ответ 3
Вы можете использовать Regex, но использование split и indexof будет понято больше программистов. Также для чего-то такого простого, возможно, лучше избегать Regex.
В обработчике событий используется объект с нормализованным событием jQuery:
$("[class^=galleryImg]").click(function(Event) {
var classAttribute=Event.target.className
var classes=classAttribute.split(" ");
for (var i=0;i<classes.length;i++)
{
if (classes[i].indexOf('targetClassNamePrefix')==0)
{
// This element has the required class, do whatever you need to.
}
}
}