JQuery селектор для нескольких классов - PullRequest
2 голосов
/ 08 июня 2011

У меня есть элементы в моей DOM с class = "LiveVal: variablepart", и я хотел бы написать селектор JQuery, который работает, даже если у элементов есть другие классы на том, что выше. Например. class = "заголовок LiveVal: varablepart" или class = "заголовок LiveVal: varablepart".

Это работает для меня, если LiveVal - первый класс с:

$('[class^=LiveVal:]').each(function ( intIndex ) { somefunction });

но, очевидно, нет, если до LiveVal есть другой класс.

В функции мне нужно извлечь переменную часть. Я планировал сделать так:

theclass = $( this ).attr('class');
varpart = theclass.replace('\bLiveVal:(.+?)[\s]', '$1');

.. но, увы, это не совпадает. Я протестировал регулярное выражение на http://gskinner.com/RegExr/, где, кажется, оно работает, но в JavaScript это не так!?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Это проверит, содержит ли имя класса 'LiveVal:'

$('[class*=LiveVal:]').each(function ( intIndex ) { somefunction });

РЕДАКТИРОВАТЬ , что вы не поняли, что у вас есть это требование (хотя и хорошее).Вы можете сделать это вместо этого: $('[class^="LiveVal:"], [class*=" LiveVal:"]')

Вот скрипка: http://jsfiddle.net/wY8Mh/

1 голос
/ 08 июня 2011

Это может быть несколько быстрее сделать это с явным фильтром:

 $("*").filter(function() { return /\bLiveVal:/.test(this.className); }).something();

Это зависит от того, работает ли нативный "querySelectorAll", и делает ли это быстро.Это также позволило бы избежать проблемы «FooLiveVal».

Стоит отметить, что в мире HTML5 может быть лучше использовать атрибут «data-LiveVal» для хранения этой информации «переменной части» в ваших элементах.Тогда вы могли бы просто сказать:

$('[data-LiveVal]').something();

В HTML это будет выглядеть так:

<div class='whatever' data-LiveVal='variable part'>

Начиная с версии 1.5, jQuery будет извлекать материала ватрибут «data-foo», когда вы передаете хвост атрибута (часть после «data-») методу «.data ()»:

  var variablePart = $(this).data('LiveVal');

«.data ()»метод не , однако обновляет свойство «data-foo» при сохранении новой «переменной части».

edit - если вы хотите значение , которое вставляется в класс после префикса имени вашего свойства ("LivaVal:"), вы можете извлечь его следующим образом:

  var rLiveVal = /\bLiveVal:(\S*)\b/;
  $('*').filter(function() { return rLiveVal.test(this.className); }).each(function() {
    var variablePart = rLiveVal.exec(this.className)[1];
    //
    // ... do something ...
    //
  });

(или какой-либо вариант этой темы).

...