用jquery选择单个li的能力

时间:2014-01-23 11:00:59

标签: javascript jquery

我有一个li列表,每个列表都包含一个从右侧滑出的菜单选项,但我只想让点击一次应用于一个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/

3 个答案:

答案 0 :(得分:1)

使用此:

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

当你说$('.options')它匹配所有选项时,而不仅仅是点击了DIV之后的选项。

FIDDLE

答案 1 :(得分: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/

也就是说,首先选择带有$(this)的点击元素,然后导航到相关的'.options' div。

答案 2 :(得分:0)

您必须将该类应用于this元素:

$('li .options').removeClass('selected'); // Clean the selected ones
if(!selected)
    $(this).addClass('selected'); // Apply to the clicked one