7

我有一些li元素,其中一些li有一个属性data-brandId,而其中一些没有这个属性。ul我有我从中过滤它的父母:

var selectedLis = new Array();
$('ul').children('li').each(function(){
    if($(this).attr(attribute) != null) {
        selectedLis.push($(this));
    }
});

有没有更好的方法来实现这一点?喜欢通过使用filter等?

更新:

我正进入(状态TypeError: $(...).data(...) is undefined

呈现的 HTML 为:

<li data-entityid="WF/008/DAM" class="dropdownli filterItem">&nbsp;&nbsp;&nbsp;
    <input type="checkbox" data-entityid="WF/008/DAM" value="WF/008/DAM/014" name="damBrand">
    <label>E&amp;W Portfolio</label>
</li>

这给了我错误:

var lis = $('ul[name=damBrandMenu]').children('li').filter(function(){
    return $(this).data('entityId').length;
});

还说我在 中没有 data-entityId li,而是在作为 li 的子元素的 input[type="checkbox"] 中有这个属性,正如您在 HTML 中看到的那样。那么过滤的方式是什么?是吗:

var lis = $('ul[name=damBrandMenu]').children('li').filter(function(){
    return $('> input[type="checkbox"]', this).data('entityid').length;
});

我也试过:$(this).attr('data-entityId').length;$('> input[type="checkbox"]', this).attr('data-entityId').length;,但他们也没有工作。我有同样的错误;TypeError: $(...).attr(...) is undefined.

4

5 回答 5

17
var selectedLis = $('ul').children('li[data-brandId]');

或使用过滤器:

var selectedLis = $('ul').children('li').filter(function() {
    return $(this).data('brandId');
});
于 2012-12-26T08:49:31.633 回答
4
$('ul > li').filter(function() {
    return this.dataset.brandId
});
于 2012-12-26T08:49:11.290 回答
2
var attribute = 'data-brandId';
var selectedLis = $('ul > li['+attribute+']');
于 2012-12-26T08:49:58.100 回答
2
var selectedLis = $('ul li').filter(function() {
    return $(this).data('brandId').length;
});
于 2012-12-26T08:51:40.567 回答
0

您可以为此简单地使用 JQuery 属性过滤器,

var selectedLis = $("li[data-brandId]");
于 2016-02-16T09:50:34.470 回答