我有一些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">
<input type="checkbox" data-entityid="WF/008/DAM" value="WF/008/DAM/014" name="damBrand">
<label>E&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
。
答案 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]");