умение выбирать индивидуальный ли с помощью jquery

0

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

$('#list li .swipe').click (function(i) {
        var t = $('.options');
        var ul = t.closest('#list');
        var selected = t.hasClass('selected');
        ul.find('li .options').removeClass('selected');

        if(!selected)
                t.addClass('selected');
 });

$('.options a').click(function(e) {
      var id = $(this).closest("li").attr("data-id");

      $(this).closest("li").fadeTo("fast", 0.01).slideUp("fast", function() {
        $(this).remove();
      });
      e.preventDefault(); 
});

Пример этого в действии http://jsfiddle.net/zidski/V8Qvy/

  • 0
    «Я хочу, чтобы клик применялся только к одному li одновременно». - Который из?
  • 0
    Вы можете нажать на них в произвольном порядке
Показать ещё 2 комментария
Теги:

3 ответа

1
Лучший ответ

Если я правильно понимаю ваше требование, вам нужно следующее:

$('#list li .swipe').click (function(i) {
    $('.options').not( $(this).next().toggleClass('selected') )
                 .removeClass('selected');
});

Демо: http://jsfiddle.net/V8Qvy/5/

Или если это выглядит беспорядочно:

$('#list li .swipe').click (function(i) {
    var $current = $(this).next().toggleClass('selected');
    $('.options').not( $current ).removeClass('selected');
});

Или для внесения незначительных изменений в структуру html:

$('#list li .swipe').click (function(i) {
    var $current = $(this).closest('li')
                          .find('.options')
                          .toggleClass('selected');
    $('.options').not( $current ).removeClass('selected');
});

Демо: http://jsfiddle.net/V8Qvy/6/

То есть, начните с выбора элемента '.options' с помощью $(this), а затем перейдите к соответствующему div '.options'.

  • 0
    Вы не отменяете выбор других строк, когда выбираете строку.
  • 0
    @ Бармар - Хороший вопрос. Сверхъестественное упрощение с моей стороны. Ответ обновлен.
1

Использовать это:

    var t = $(this).next('.options');

Когда вы говорите $('.options') он соответствует всем параметрам, а не только после DIV, на который было нажато.

FIDDLE

0

Вы должны применить класс к this элементу:

$('li .options').removeClass('selected'); // Clean the selected ones
if(!selected)
    $(this).addClass('selected'); // Apply to the clicked one
  • 0
    selected должен быть добавлен к элементу .options , вы применяете его к .swipe которому щелкнули.
  • 0
    Правда, тогда ваш ответ правильный :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню