结合$ .each函数

时间:2016-12-10 17:22:19

标签: javascript jquery

我在jQuery中使用$ .each函数来分配和更改各种元素上的类和ID。我想知道是否有办法将这些功能组合成一个单独的功能而不是具有三个独立的功能。

var stored = $.each;

var myFunction = function() {
    $(this).removeAttr("id");
};

  function numbers() {

    //function 1
    stored($(".numbers"), function(index, value) {
        var num = index + 1 + ".";
        $(value).empty();
        $(value).append(num);
    });

    //function 2
    stored($(".weight-change"), function(index) {
        myFunction();
        $(this).attr("id", "weight" + index);
    });

    //function 3
    stored($(".onebox"), function(index) {
        myFunction();
        $(this).attr("id", "shipprice1box" + index);
    });
 }

2 个答案:

答案 0 :(得分:1)

您可以创建一个通用函数并调用它。在更新之前无需删除该属性。只是浪费处理时间。 attr支持一个函数,因此不需要每个函数。

function updateIds (selector, prefix) {
    $(selector).attr("id", function (index) { return prefix + index; }); 
}

updateIds(".weight-change", "weight");
updateIds(".onebox", "shipprice1box");

答案 1 :(得分:1)

以下是如何避免代码重复的问题(您可以根据需要进一步编辑)。

var arr = ['.numbers', '.weight-change', '.onebox'];

stored($(arr.join()), function(index, value) {
    if ($(this).is(arr[0])) {
        var num = index + 1 + ".";
        $(value).empty();
        $(value).append(num);
    }
    else if ($(this).is(arr[1]) || $(this).is(arr[2])) {
        myFunction();
        if ($(this).is(arr[1])) {
            $(this).attr("id", "weight" + index);
        }
        else if ($(this).is(arr[2])) {
            $(this).attr("id", "shipprice1box" + index);
        }
    }
});