Javascript 检查n个元素是否包含设置为true的数据属性
我有一个网站,其中有五个复选框,一个div包含另一个div,每个div包含五个隐藏的输入,其值Javascript 检查n个元素是否包含设置为true的数据属性,javascript,jquery,Javascript,Jquery,我有一个网站,其中有五个复选框,一个div包含另一个div,每个div包含五个隐藏的输入,其值1或为空。该值来自DB 这是一个用div表示div容器的示例: <input checkbox value="a"> <input checkbox value="b"> <input checkbox value="c"> <input checkbox value="d"> <input checkbox value="e"> <di
1
或为空。该值来自DB
这是一个用div表示div容器的示例:
<input checkbox value="a">
<input checkbox value="b">
<input checkbox value="c">
<input checkbox value="d">
<input checkbox value="e">
<div class="container">
<div class="content" data-name="combine">
<input type="hidden" value="" data-name="a" />
<input type="hidden" value="" data-name="b" />
<input type="hidden" value="" data-name="c" />
<input type="hidden" value="" data-name="d" />
<input type="hidden" value="" data-name="e" />
</div>
<div class="content" data-name="combine">
<input type="hidden" value="1" data-name="a" />
<input type="hidden" value="" data-name="b" />
<input type="hidden" value="" data-name="c" />
<input type="hidden" value="1" data-name="d" />
<input type="hidden" value="" data-name="e" />
</div>
</div>
javascript
首先检查div.container
是否有child,如果有child,则代码迭代每个child。在每个子项上,我迭代五个each复选框(enabledChecks
),查看隐藏的输入是否为空。如果五个输入为空,那么我需要添加'div.blocked'。如果我正确理解了问题,您希望找到与某个选择器匹配的div,该选择器没有子输入
元素和非空值。.filter
方法似乎非常适合这里:
$("[data-name='"+name+"'] div.tagsProds")
.filter(function() {
// assert that at least one child input has a value
var $inputsWithValue = $(this).find("input[name='avail_" + v + "'][value!='']");
return $inputsWithValue.length === 0;
})
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds”)
.filter(函数(){
//断言至少有一个子输入具有值
var$inputsWithValue=$(this).find(“输入[name='avail\'+v+']”][value!=''”;
返回$inputsWithValue.length==0;
})
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
另一个仅选择器选项可能如下所示:
$("[data-name='"+name+"'] div.tagsProds:not(:has(input[name='avail_" + v + "'][value!='']))")
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds:not(:has(input[name='avail.'+v+”][value!=”))
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
JSFiddle:
请注意,上面的示例遵循示例代码中的选择器,但不会对示例标记起作用。如果我正确理解了这个问题,您希望找到与某个选择器匹配的div,该选择器没有具有非空值的子输入
元素。.filter
方法似乎非常适合这里:
$("[data-name='"+name+"'] div.tagsProds")
.filter(function() {
// assert that at least one child input has a value
var $inputsWithValue = $(this).find("input[name='avail_" + v + "'][value!='']");
return $inputsWithValue.length === 0;
})
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds”)
.filter(函数(){
//断言至少有一个子输入具有值
var$inputsWithValue=$(this).find(“输入[name='avail\'+v+']”][value!=''”;
返回$inputsWithValue.length==0;
})
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
另一个仅选择器选项可能如下所示:
$("[data-name='"+name+"'] div.tagsProds:not(:has(input[name='avail_" + v + "'][value!='']))")
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds:not(:has(input[name='avail.'+v+”][value!=”))
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
JSFiddle:
请注意,上面的示例遵循示例代码中的选择器,但不会对示例标记起作用。如果我正确理解了这个问题,您希望找到与某个选择器匹配的div,该选择器没有具有非空值的子输入
元素。.filter
方法似乎非常适合这里:
$("[data-name='"+name+"'] div.tagsProds")
.filter(function() {
// assert that at least one child input has a value
var $inputsWithValue = $(this).find("input[name='avail_" + v + "'][value!='']");
return $inputsWithValue.length === 0;
})
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds”)
.filter(函数(){
//断言至少有一个子输入具有值
var$inputsWithValue=$(this).find(“输入[name='avail\'+v+']”][value!=''”;
返回$inputsWithValue.length==0;
})
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
另一个仅选择器选项可能如下所示:
$("[data-name='"+name+"'] div.tagsProds:not(:has(input[name='avail_" + v + "'][value!='']))")
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds:not(:has(input[name='avail.'+v+”][value!=”))
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
JSFiddle:
请注意,上面的示例遵循示例代码中的选择器,但不会对示例标记起作用。如果我正确理解了这个问题,您希望找到与某个选择器匹配的div,该选择器没有具有非空值的子输入
元素。.filter
方法似乎非常适合这里:
$("[data-name='"+name+"'] div.tagsProds")
.filter(function() {
// assert that at least one child input has a value
var $inputsWithValue = $(this).find("input[name='avail_" + v + "'][value!='']");
return $inputsWithValue.length === 0;
})
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds”)
.filter(函数(){
//断言至少有一个子输入具有值
var$inputsWithValue=$(this).find(“输入[name='avail\'+v+']”][value!=''”;
返回$inputsWithValue.length==0;
})
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
另一个仅选择器选项可能如下所示:
$("[data-name='"+name+"'] div.tagsProds:not(:has(input[name='avail_" + v + "'][value!='']))")
.each(function() {
// now act on those value-less divs
$(this)
.append("<div class='blocked'></div>")
.addClass("js_noSortable")
.unbind("click");
});
$(“[data name=”+name+“]div.tagsProds:not(:has(input[name='avail.'+v+”][value!=”))
.each(函数({
//现在对那些无价值的div采取行动
$(本)
.附加(“”)
.addClass(“js_noSortable”)
.解除绑定(“单击”);
});
JSFiddle:
请注意,上面的示例遵循示例代码中的选择器,但不会对示例标记起作用。因为我没有足够的声誉来写评论,所以我会写一个答案
首先,如果您想找到一种使用jQuery
函数的方法,我认为您的答案非常有趣,但由于我不知道任何函数可以这样做,我认为您可以创建一个array()
,当您检查输入是否为空值时,将其推送到数组中,循环结束后,请检查数组()
的长度,如果它与您的复选框数匹配,则添加。阻塞的,因为我没有足够的声誉来写评论,所以我会写一个答案