jQuery过滤具有特定属性的子项

时间:2012-12-26 08:46:45

标签: jquery

我有一些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;
});

另外说我在li中没有data-entityId,而是在输入[type =“checkbox”]中有这个属性,这是li的子,你可以在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

5 个答案:

答案 0 :(得分:14)

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

或使用过滤器:

var selectedLis = $('ul').children('li').filter(function() {
    return $(this).data('brandId');
});

答案 1 :(得分:4)

$('ul > li').filter(function() {
    return this.dataset.brandId
});

答案 2 :(得分:2)

var attribute = 'data-brandId';
var selectedLis = $('ul > li['+attribute+']');

答案 3 :(得分:2)

var selectedLis = $('ul li').filter(function() {
    return $(this).data('brandId').length;
});

答案 4 :(得分:0)

你可以简单地使用JQuery属性过滤器,

var selectedLis = $("li[data-brandId]");