2015-03-02 3 views
-1

У меня есть html div ids динамически сгенерированный.Динамический селектор jQuery с фильтром

<div id="1-test" class="new">  
<div id="2-test" class="new"> 
<div id="3-test" class="new"> 
<div id="4-test" class="new"> 

Мне нужно показать/скрыть эти divs одним щелчком мыши. Я пробовал это

var filterid='test'; 
    $('.new[id$=filterid]').each(function (index) { 
     $(this).toggle(); 
    }); 

Но, это не происходит внутри цикла. Может ли кто-нибудь сообщить об ошибке здесь? Заранее спасибо.

Если я это сделаю, я вижу, что цикл работает.

$('.new').each(function (index) { 
     alert($(this).attr('id')); 
    }); 

Когда я фильтрую на основе идентификатора динамически и пытаюсь войти, цикл не работает!

+2

Искать "конкатенации". '$ ('. new [id $ =' + filterid + ']')' – undefined

+3

Как только вы исправите проблему конкатенации, упомянутую Vohuman, вы можете отбросить ее, поскольку она не нужна. '$ ('. new [id $ =' + filterid + ']'). toggle();'. Вам не нужно даже «.new». – j08691

+0

j08691 и Vohuman, спасибо за быстрый ответ. Вы абсолютно правы!! Раньше я пытался конкатенацию строк, но это не сработало. Но, я снова попробовал, и это работает :) странно, хотя !! – techspider

ответ

2

Просто, чтобы отметить решение ...

$('.new[id$=' + filterid + ']').toggle(); 

Благодаря Вохуманом и j08691

0

Пожалуйста, проверьте мои Plunk и посмотрите, дает ли это вам функциональность. Я считаю, что это должно быть из того, что вы описали.

Вместо:

var filterid='test'; 
    $('.new[id$=filterid]').each(function (index) { 
    $(this).toggle(); 
}); 

Я добавил «щелчок» событие в виде:

$(".new").click(function(){ 
    var filter = $("#filter").val(); 
    if ($(this).attr("id") != filter) return; 
    $(this).toggle(); 
}); 

Это проверяет, если идентификатор фильтра такой же, как то, что была нажата и только позволяет их переключаться.

Если вам нужна уточненная фильтрация, дайте мне знать. Удачи!

+0

Комментарии от Vohuman и j08691 отлично работают! – techspider

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