2015-04-29 2 views
1

В основном это фильтр для wordpress.Проверьте, есть ли у div все четыре класса

Все сообщения показаны на одной странице, и я добавил имена категорий в качестве классов в основной div (.box) сообщения, где один div будет иметь несколько классов.

В окне фильтра есть четыре выпадающих списка со всеми категориями, перечисленными в качестве параметров.

Я хотел показать только тот div, который имеет все активные имена категорий в качестве классов.

Ниже приведен код. С условием IF, как я могу использовать идею «И»?

Этот код дает мне ошибку.

$('#filter select').change(function() 
    { 
      var upper=$('#upper').val(); 
      var sole=$('#sole').val(); 
      var toe=$('#toe').val(); 
      var midsole=$('#midsole').val(); 

      $('.box').each(function() 
      { 

       if($(this).hasClass(upper) && hasClass(sole) && hasClass(toe) && hasClass(midsole)) 
       { 
        $(this).show(); 
       } 
       else{ 
        $(this).hide(); 
       } 
    }); 

}); 
+0

Вы пропустили '$ (это) .' с' hasClass (единоличным) ' – Satpal

+1

Вы можете, вероятно, придется смотреть на http://stackoverflow.com/ вопросы/2214952/JQuery-hasclass проверки в обмен на более чем один-класс –

+0

@madalinivascu: это не div, но выберите выпадающие списки. – Rahul

ответ

4

Вы можете использовать $.fn.filter метод, как это с комбинированным классом, выбранным:

$('#filter select').change(function() { 
    var upper = $('#upper').val(); 
    var sole = $('#sole').val(); 
    var toe = $('#toe').val(); 
    var midsole = $('#midsole').val(); 

    var classes = '.' + [upper, sole, toe, midsole].join('.'); 
    $('.box').hide().filter(classes).show(); 
}); 

В принципе, конструкция '.' + [upper, sole, toe, midsole].join('.') производит строку из четырех классов сцепляются с . характером: .class1.class2.class3.class4, который является селектором CSS для .box элемент, имеющий все 4 класса одновременно.

+0

Это больной человек! Работал сразу. Просто еще один вопрос. Первый вариант каждого раскрывающегося списка - «все», который я добавил вручную. Как заставить его работать, чтобы сообщения с одной из категорий в этом выпадающем списке отображались, если выбрано значение ALL? Большое спасибо за помощь чувак. – Rahul

3

Вы забыли $(this) к hasClass.

if($(this).hasClass(upper) && $(this).hasClass(sole) && $(this).hasClass(toe) && $(this).hasClass(midsole)) { 
    // Yes this div has all four classes 
} 
+0

Спасибо за помощь Тушара. – Rahul

0
var ele=$(this); 

if(ele.hasClass(upper) && ele.hasClass(sole) && ele.hasClass(toe) && ele.hasClass(midsole)) 
  1. Вы должны дать $(this) всем .hasClass API в, если состояние.
  2. Поэтому вместо того, чтобы повторять, присвойте его переменной и используйте ее, как указано выше.
0

Ваш забытый объект jquery selector $(this).

if ($(this).hasClass(upper) && $(this).hasClass(sole) && $(this).hasClass(toe) && $(this).hasClass(midsole)) { 
     ... 
    } 
0

Вы можете использовать this.hasClass("class1 class2 class3"), если Вы уверены, что для того, еще

this.hasClass("class1) && this.hasClass("class2 ") 
0

Более красивый способ сделать это:. $ ("# MyId") есть ("foo.bar.")

Edit: это также зависит от порядка классов

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