JQuery - 在活动类时获取值data-attribute

时间:2016-10-26 06:26:48

标签: javascript jquery html

我想在anchor标记在我的console.log中有活动类时显示数据属性

不幸的是,它始终输出null值。

我提到了这个stackoverflow question

这是我的 HTML



$(document).ready(function () {

  $('.list-group-item').on('click', function (e) {

    var previous = $(this).closest(".list-group").children(".active");
    previous.removeClass('active'); // previous list-item
    $(e.target).addClass('active'); // activated list-item

    var itemType = $('.list-group a').find('.active').data('itemtype');

    console.log(itemType);

  });

});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="list-group">
  <a href="#" class="list-group-item" data-itemtype="1">Cras justo odio</a>
  <a href="#" class="list-group-item" data-itemtype="0">Dapibus ac facilisis in</a>
  <a href="#" class="list-group-item" data-itemtype="3">Morbi leo risus</a>
  <a href="#" class="list-group-item" data-itemtype="4">Porta ac consectetur ac</a>
  <a href="#" class="list-group-item" data-itemtype="2">Vestibulum at eros</a>
</div>
&#13;
&#13;
&#13;

请帮助我跟上发展的步伐。

提前谢谢

6 个答案:

答案 0 :(得分:2)

因此,在包含"active"类的div中找到list-group类,因此请使用$('.list-group').find('.active').data('itemtype')选择器代替$('.list-group a').find('.active').data('itemtype')

您的选择器$('.list-group a').find('.active').data('itemtype')将尝试在div的active标记中找到a类,其中list-group类正在产生问题。

请查看工作片段。

$(document).ready(function () {

  $('.list-group-item').on('click', function (e) {

    var previous = $(this).closest(".list-group").children(".active");
    previous.removeClass('active'); // previous list-item
    $(e.target).addClass('active'); // activated list-item

    var itemType = $('.list-group').find('.active').data('itemtype');

    console.log(itemType);

  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="list-group">
  <a href="#" class="list-group-item" data-itemtype="1">Cras justo odio</a>
  <a href="#" class="list-group-item" data-itemtype="0">Dapibus ac facilisis in</a>
  <a href="#" class="list-group-item" data-itemtype="3">Morbi leo risus</a>
  <a href="#" class="list-group-item" data-itemtype="4">Porta ac consectetur ac</a>
  <a href="#" class="list-group-item" data-itemtype="2">Vestibulum at eros</a>
</div>

答案 1 :(得分:1)

Try this one  

$(document).ready(function () {

    $('.list-group-item').on('click', function (e) {

        var previous = $(this).closest(".list-group").children(".active");
        previous.removeClass('active'); // previous list-item
        $(e.target).addClass('active'); // activated list-item

        var itemType = $('.list-group a').find('.active').attr('data-itemtype');

        console.log(itemType);

    });

});

答案 2 :(得分:1)

您的代码没有用,因为anchor在使用语句$('.list-group a').find('.active')时没有子/后代元素,因此您获得了undefined,在这里您可以使用{{3}而不是.filter()

  var itemtype = $('.list-group a').filter('.active').data('itemtype');

您在之前的声明中添加了active类。直接使用$(e.target).data('itemtype');

根据HTML,您也可以使用this代替e.target

&#13;
&#13;
jQuery(document).ready(function() {

  $('.list-group-item').on('click', function(e) {

    //Remove active class from siblings 
    $(this).closest(".list-group").children(".active").removeClass('active')

    // activated list-item
    $(this).addClass('active');
    var itemType = $(this).data('itemtype');

    console.log(itemType);
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="list-group">
  <a href="#" class="list-group-item" data-itemtype="1">Cras justo odio</a>
  <a href="#" class="list-group-item" data-itemtype="0">Dapibus ac facilisis in</a>
  <a href="#" class="list-group-item" data-itemtype="3">Morbi leo risus</a>
  <a href="#" class="list-group-item" data-itemtype="4">Porta ac consectetur ac</a>
  <a href="#" class="list-group-item" data-itemtype="2">Vestibulum at eros</a>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

我认为这应该可以帮到你

var itemtype=$(".list-group a.active").attr('data-itemtype')

答案 4 :(得分:1)

我们走了 $('。list-group-item')。on('click',function(e){

var previous = $(".list-group-item");
previous.removeClass('active'); // previous list-item
$(this).addClass('active'); // activated list-item

var itemType = $('.list-group a.active').attr('data-itemtype');
console.log($(itemType);

});

答案 5 :(得分:1)

@Terence,它始终输出find值,因为var itemType = $('.list-group a').find('.active').data('itemtype');函数获取后代元素。

此代码null会返回anchor,因为active中没有后代有一个名为data-attribute的类

您可以通过以下方式获取所需的$(document).ready(function() { $('.list-group-item').on('click', function(event) { var previous = $('.list-group-item.active'); previous.removeClass('active'); // previous list-item $(this).addClass('active'); // activated list-item var itemType = $(this).data('itemtype'); console.clear(); console.log(itemType); }); });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<div class="list-group">
  <a href="#" class="list-group-item" data-itemtype="1">Cras justo odio</a>
  <a href="#" class="list-group-item" data-itemtype="0">Dapibus ac facilisis in</a>
  <a href="#" class="list-group-item" data-itemtype="3">Morbi leo risus</a>
  <a href="#" class="list-group-item" data-itemtype="4">Porta ac consectetur ac</a>
  <a href="#" class="list-group-item" data-itemtype="2">Vestibulum at eros</a>
</div>
xxx-theme.yml