2015-05-15 3 views
0

Я пытаюсь использовать селектор not JQuery с селектором eq с переменными для фильтрации списка элементов на основе критериев поиска.Использование переменных внутри селектора JQuery равно?

У меня есть список продуктов, смежных со списком цен. У меня также есть поле поиска, где вы можете искать по продукту или цене. Моя цель заключается в том, когда кто-то ищет конкретный продукт, только для показа этого продукта, а остальные продукты должны быть скрыты.

Вот мой код.

var numItems = 5; 

// When the search button is clicked 
$("#search-btn").click(function() { 
     // As long as the search field has a value 
     if ($("#search-field").val() !== "") { 
      var productsArray = []; 
      for (var i = 0; i < numItems; i++) { 
       // If the product name equals the search field value add to 
       // the array 
       if (products[i] == $("#search-field").val()) { 
        productsArray.push(products[i]); 
       } 
      } 
      // Get the index of the product 
      var pos = products.indexOf(productsArray[0]); 
      $("#products-list > li:not(:eq(pos - 1)), 
      #price-list > li:not(:eq(pos - 1))").hide(); 
     } 
    }); 

Мой код работает, если у меня есть числовое значение внутри селектора eq (т.е. 2), но не тогда, когда я разместить переменную внутри. Вот конкретная строка.

$("#products-list > li:not(:eq(pos - 1)), #prices-list > li:not(:eq(pos - 1))").hide(); 

#products-list и #prices-list имена моих списков продуктов и цен соответственно. Я использую прямой дочерний селектор >, чтобы найти все элементы списка этих списков. Затем я пытаюсь выбрать элементы списка, которые не соответствуют критериям поиска, и скрыть их. Таким образом отображаются только элементы списка поиска.

Мне нужно знать, как я могу поместить переменную внутри селектора jquery.

+2

'' $ ("# products-list> li: not (: eq (" + (pos - 1) + ")), # prices-list> li: not (: eq (" + (pos - 1) + "))"). hide(); '' –

+0

Я знаю, что это должно быть, но это была такая простая проблема, и я не чувствовал необходимости объяснять свой ответ, поэтому вместо этого использовал комментарий. –

+0

** Селектор jQuery - это просто строка **. используйте конкатенацию строк. –

ответ

0

Он смотрит на меня, как вам просто нужно использовать конкатенации:

$("#products-list > li:not(:eq(" + (pos - 1) + ")), #prices-list > li:not(:eq(" + (pos - 1) + "))").hide(); 

Надеется, что это помогает!

+0

Добавьте круглые скобки вокруг '' pos-1'', иначе вы будете оценивать что-то вроде '' '# products-list> li: not (: eq (0" - 1'') Причина, по которой я знаю это: ['' Массив (16) .join («wat» - 1) + «Batman!» ''] (Https://www.destroyallsoftware.com/talks/wat) –

+0

Если это часть строки, это, как правило, не так , но я люблю делать это как хорошую практику в любом случае. – wrxsti

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