2015-04-20 5 views
1

HTMLКак сделать jQuery выбрать именно указанные классы?

<span class="a">a</span> 
<span class="a b">a b</span> 
<span class="a b c">a b c</span> 

Javascript

var obj = $(".a.b"); //selects 2 spans .a .b and .a .b .c 
alert($(obj).text()); 

Как сделать JQuery выбрать однопролетный с классами .a и .b только?

Я не могу использовать jQuery не в моем случае, потому что раньше я мог не знать о классе c.

+0

что-то вроде $ ('. A.b: not (.c)') – SSA

+0

Я не могу использовать не потому, что в моем случае, потому что раньше я мог не знать о классе c. –

+0

Редактировать вопрос – SSA

ответ

1

Если вы не знаете, другой класс (ы) раньше времени, вы можете отфильтровать элементы, которые имеют более двух ваших целевых классов:

var obj = $(".a.b"). 
 
    filter(
 
    function() { 
 
     return(this.className.split(/\s+/).length == 2); 
 
    } 
 
); 
 

 
console.log($(obj).text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<span class="a">a</span> 
 
<span class="a b">a b</span> 
 
<span class="a b c">a b c</span>

1

Что-то вроде: $(":not(selector)")

Пример: Выбрать все <p> элементы, за исключением тех, с классом = "интро":

$("p:not(.intro)") 

В случае, если вы не хотите использовать not метод, попробуйте это : $(selector).filter(criteria,function(index))

Пример: Верните все <p> элементы с именем класса "интро":

$("p").filter(".intro") 
1

Вы можете использовать метод jquery not() для извлечения элементов из результатов (oppersite of add()). here are the docs.

var results = $('.a').add('.b').not('.c');

, если вы хотите только элементы с классом .a И .b и без каких-либо других классов, вам нужно сделать рег ех на el.className. проверка любых других сегментов имени класса в дополнение к .a и .b, что-то вроде этого:

$(function() { 
    var results = $('.a.b'); 

    var onlyAAndB = results.filter(function (index, el) { 
     var classes = el.className; 
     var remaining = classes.replace('a', '').replace('b', '').replace(' ', ''); 
     if(!remaining) { 
      return el; 
     } 
    }); 

    console.log(onlyAAndB); 
}); 

выше является Longway раунд и может быть замкнута с регулярным выражением, а затем заменить им с помощью замены здесь, чтобы продемонстрировать процесс

0

На мой взгляд, другие ответы немного переборщит. Вы можете использовать attribute selectors указать точное значение атрибута следующим образом:

$('span[class="a b"]') 

До тех пор, пока вы уверены, что элемент, который вы хотите выбрать, будет иметь только те классы, это будет работать.

Смежные вопросы