获取数据属性值而不传递HTML元素ID

时间:2013-05-06 12:24:28

标签: jquery html5 dom unobtrusive-javascript custom-data-attribute

我有INPUT HTML标记,其类型为隐藏在视图中。它看起来如下:

     <input type="hidden" data-abc-value1="value1" data-abc-value2="value2" data-abc-
         value3="value3"/>

我想获取数据属性的值(data-abc-value1,data-abc-value2,data-abc-value3)而不传递元素id。

我能以某种方式找到元素的匹配数据 - abc(这是常见的)属性并获取其值。因此我可以避免依赖于元素id来获取数据 - *值。

5 个答案:

答案 0 :(得分:2)

试试这段代码,这可能对您有所帮助

<强> HTML

<input type="hidden" data-abc-value1="value1" data-abc-value2="value2" data-abc-value3="value3" />

<强>脚本

$('input[type="hidden"]').each(function(i, e){
    $.each(e.attributes, function(j,v){
        if(/^data-abc/.test(v.nodeName)) {
            console.log(v.nodeName, v.nodeValue);
        }
    });
});

演示JS http://jsfiddle.net/UYNsw/

答案 1 :(得分:2)

jQuery没有提供按部分属性名称查询的方法,因此您必须获取所有隐藏的输入,然后使用正则表达式按属性过滤结果:

$(function() {
    var inputs = $('input[type="hidden"]').filter(function() {
        var attrs = this.attributes; //get attribute collection for this element
        for(var i=0; i<attrs.length; i++) {
            if(/data-abc-*/.test(attrs[i].name)) {
                return true; //adds this element to the jquery collection
            }
        }
        return false;
    });

    //do something with inputs

});

http://jsfiddle.net/UPH6R/1/

答案 2 :(得分:1)

当jQuery可用时,使用.attr()函数获取w3c无效属性。 还可以使用.eq(0)确保选择第一个且仅有一个隐藏输入字段。如果有更多隐藏的输入字段,则无法保证这将起作用。

var inp1 = $("input[type=hidden]").eq(0),
    val1 = inp1.attr("data-abc-value1"),
    val2 = inp1.attr("data-abc-value2"),
    val3 = inp1.attr("data-abc-value3");

答案 3 :(得分:1)

在jsFiddle http://jsfiddle.net/vijaypatel/xk42F/

查看样本
$.fn.filterData = function (set) {
    var elems = $([]);
    this.each(function (i, e) {
        $.each($(e).data(), function (j, f) {
            if (j.substring(0, set.length) == set) {
                elems = elems.add($(e));
            }
        });
    });
    return elems;
}

$.each($('input').filterData('abc'), function (index, value) {
            alert($(this).attr('data-abc-value1'));
        });

答案 4 :(得分:0)

您可以$("input[type='hidden']").attr('data-abc-value1')$('input[data-abc-value1]').attr('data-abc-value1')

获取它们