Наилучшая реализация зависит от того, какие факторы мы можем принять в отношении остальной части вашей разметки.
Можем ли мы предположить, что all open-modal-overlay-*
должен иметь этот прослушиватель кликов?
Можем ли мы предположить, что это класс only , который у них есть? В этом случае мы могли бы сделать что-то вроде:
$('*[class^=open-modal-overlay-]').click(function() {
var id = $(this).attr('class').slice(-1); // last char of "class" attribute
$('#modal-overlay-'+id).modal();
});
Если мы не можем предположить, что это их единственный класс, то мы не можем использовать .attr('class')
подобным образом и не можем использовать селектор «атрибут класса начинается с» class^=
. Если у них у всех есть другой общий класс, уникальный для них, мы могли бы лучше получить к ним доступ по $('.open-modal-overlay')
(если, скажем, их атрибуты класса class="open-modal-overlay open-modal-overlay-2"
и т. Д.).
Если нет, нам нужно использовать селектор «атрибут класса содержит» class*=
или просто указать селекторы:
$('.open-modal-overlay-1, .open-modal-overlay-2, .open-modal-overlay-3, .open-modal-overlay-4, .open-modal-overlay-5, .open-modal-overlay-6').click(function() {
...
});
И мы не можем получить переменную id
таким образом, поэтому нам нужно сделать что-то вроде:
var id = $(this).attr('class').replace(/^.*open-modal-overlay-(\d+).*$/, '$1');