Как извлечь конкретную часть класса в элементе с помощью jQuery?

0

У меня есть элементы, которые имеют такие классы:

class="modal-view arch business"

Как я могу найти элементы, которые имеют modal- стартовое слово в классе и возвращают слово "мнение" или какое-либо слово там после модального?

Я уже пробовал это

jQuery("*[class^='modal-'],*[class^='modal-'] a").live('click',function(){
var type = jQuery(this).attr('class').split('-')[1];
alert( type );
});

Это не работает. Он показывает мне просмотр, только если класс modal-, но если есть другие классы, он не работает. Может кто-нибудь указать мне в правильном направлении?

Поэтому я пытаюсь найти часть после modal-, но не других классов. Используемый множитель split используется, если класс имел только слово modal-

  • 0
    Вы можете изменить разметку на всех? Это, очевидно, не лучший способ справиться с ситуацией.
  • 0
    Если вы можете изменить разметку, я мог бы попробовать что-то вроде <div data-modal-type="view" ... ></div>
Теги:

4 ответа

1
Лучший ответ

Используйте $('*[class^=modal-]').live(...);

Работа jsFiddle

  • 1
    Посмотрите на api.jquery.com/category/selectors для большего количества вариантов выбора. Этот называется: Атрибут начинается с селектора [имя ^ = "значение"]
0

Вы можете добавить регулярное выражение после разделения, чтобы получить первое слово после тире.

jQuery("*[class^='modal-'],*[class^='modal-'] a").live('click',function(){
  var type = jQuery(this).attr('class').split('-')[1].match(/\w*/);
  alert( type );
});

http://jsfiddle.net/xw87B/

0

Использовать атрибут начинается с селектора, затем получить className, разделить на пробел, чтобы получить первый класс, считая его всегда первым классом, как в примере, а затем разбить первый класс на дефис и поп последнего бита:

$(document).on('click', '[class^="modal"]', function() {
    var klass = this.className.split(/\s+/g)[0];
    alert ( klass.split('-').pop() );
});

FIDDLE

-1

Я бы предложил (хотя это не проверено, и я использую on() вместо live()):

$('body').on('click', '[class^="modal-"]', function(){
    var classes = this.className.split(/\s+/);
    for (var i = 0, len = classes.length; i < len; i++){
        if (classes[i].indexOf('modal-') === 0) {
            console.log(classes[i].replace('modal-','');
        }
    }
});

Однако я не могу придумать "легкий" способ, которым может предложить библиотека jQuery.

Однако стоит заметить, что вы, кажется, решаете другую проблему (состояние представления вашего приложения или modal диалог?) Неправильным образом, что приводит к сложному решению, которое может не потребоваться.

Рекомендации:

  • 0
    @adeneo: итак, я мог забыть добавить в split() ... (Я изначально собирался использовать classList а затем решил classList от него, переключившись на className , но забыв о разнице между массивами и строками. Вздох. Спасибо за подвох! :))
  • 0
    Я так и предполагал; Хотя мне любопытно, чтобы я проголосовал против (не касается как такового; я просто не знаю, упускаю ли я что-то, пропускаю или забываю что-то еще ...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню