使用JQuery选择所有元素的data-field-id

时间:2012-10-17 10:31:49

标签: jquery selector

我想要超简洁,并且有以下javascript代码来侦听自定义触发事件:

var concat = "";
$("body")
    .unbind("__evt_selgrps_ok")
    .bind("__evt_selgrps_ok", function(event, param) {
        $(param).each( function() {
            concat += $(this).attr("data-field-id");
        });
    });

使用以下代码触发事件:

$("body")
    .trigger('__evt_selgrps_ok', 
    [$("#<%=DialogID%>").find(":input:checked")]);

简单地说,上面获取了当前检查的Checkbox类型的所有输入字段,并将元素数组作为参数传递给绑定处理程序(根据此问题中的第一个代码示例)。

功能上,此代码运行良好。我只是认为有很多代码可以做一些相对简单的事情,那就是将所有选中复选框的“data-field-id”属性值作为参数传递给触发器。

理想情况下,传递给触发器处理程序的值的简单json数组会好得多。触发器处理程序不应该真正了解输入元素,因为它只是想接收属性值数组。

我想,我的问题的底线是,你如何让JQuery使用某个选择器为你提供所有指定属性的数组。

我只对一个非常简洁的解决方案感兴趣,最好不要使用'each'函数。

谢谢! SR

1 个答案:

答案 0 :(得分:2)

您可以使用map()从一组元素中投射一系列属性:

var fieldIds = $("#<%=DialogID%> :input:checked").map(function() {
    return $(this).attr("data-field-id");
}).get();

在您的情况下,您可以像这样使用它:

$("body").trigger("__evt_selgrps_ok",
    $("#<%=DialogID%> :input:checked").map(function() {
        return $(this).attr("data-field-id");
    }).get());