jQuery .data()选择器

时间:2011-10-06 14:59:27

标签: javascript jquery

之前已经问过这个问题,但是我找不到自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");
    }
});

这可能没有插件吗?

5 个答案:

答案 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"] - 也会将条件应用于属性选择