之前已经问过这个问题,但是我找不到自2010年5月以来给出的任何答案。如果这些答案中的一个或多个仍然相关,我很乐意删除这个问题。
jQuery是否有一个选择器,允许我按.data()
添加的值进行过滤?
示例:(见评论)
//Set IsValid data attribute on all elements that have fired the blur event
$(".txtPayment").blur(function (e) {
if (IsCurrency($(this).val()))
$(this).data("IsValid", true);
else
$(this).data("IsValid", false);
SumPayment();
});
//Sum all payments
// I'd like to be able to select all inputs with:
// class == "txtPayment" value != "" && IsValid == true
$('.txtPayment[value!=""]').each(function ()
{
var sum = 0;
if ($(this).data("IsValid"))
{
sum += Number($(this).val());
$(this).removeClass("textError");
}
else
{
$(this).addClass("textError");
$("#spanSumPayment").addClass("textError");
}
});
这可能没有插件吗?
答案 0 :(得分:4)
jQuery是否有一个选择器,允许我按
.data()
添加的值进行过滤?
几乎。它具有执行此操作的功能。
$(".txtPayment").blur(function () {
$(this).data("IsValid", IsCurrency($(this).val()) );
SumPayment();
});
var validOnes = $('.txtPayment[value!=""]').filter(function() {
return !!$(this).data("IsValid")); // (!! turns anything into a Boolean)
});
答案 1 :(得分:1)
没有。你为什么不想使用插件?您总是可以使用.filter
:
$('.txtPayment[value!=""]').filter(function() {
return $(this).data("IsValid");
}).each(function() { ... });
答案 2 :(得分:1)
您可以选择加载页面时存在的属性,例如data-id="5"
,而不是通过.data()
设置的数据。但是,您可以使用.filter()
方法。
$('.txtPayment[value!=""]').filter(function(){
return $(this).data("isValid");
})
答案 3 :(得分:1)
没有。如果未列出here,则不能将其用作选择器。
如果您想将所有元素与特定数据存储在一个变量中,您可以使用filter()
,例如:
var dataElements = $('.txtPayment[value!=""]').filter(function(){
return $(this).data("IsValid");
});
答案 4 :(得分:0)
您也可以在jQuery中手动设置这样的元素的数据属性:
$(element).attr('data-test', true);
这将允许您使用data()函数访问数据,如下所示:
$(element).data('test'); ==> true
允许您在jQuery / CSS中选择元素,如下所示:
element[data-test]
- 仅检查data-test
属性的存在element[data-test="true"]
- 也会将条件应用于属性选择