代码之家  ›  专栏  ›  技术社区  ›  Non

无法调用函数来检索“value”参数并替换字符串中的字符

  •  1
  • Non  · 技术社区  · 8 年前

    有一些代码是另一个开发人员重复的。 我想把它放在一个函数中,然后调用它,但现在我有点困惑了。

    这是我的代码:

    if(true) {
        $(this).attr('id', function (i, val) {
           return val.replace('Less', 'More');
        }).attr('data-bactmln', function (i, val) {
           return val.replace('Less', 'More')
        });
    } else {
        $(this).attr('id', function (i, val) {
           return val.replace('More', 'Less');
        }).attr('data-bactmln', function (i, val) {
           return val.replace('More', 'Less')
        });
    }
    

    我想这样做:

    var toggleTealiumId = function(p1, p2) {
        return val.replace(p1, p2);
    };
    
    if(true) {
       $(this).attr('id', toggleTealiumId('More', 'Less'));
    } else {
       $(this).attr('data-bactmln', toggleTealiumId('Less', 'More'));
    }
    

    那个 val value 在第一行代码中的字符串,但现在我得到 undefined

    那我怎么才能停下来 val公司 从存在 未定义 并且以适当的方式进行?

    有什么建议吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   t.niese    8 年前

    您需要这样写:

    function toggleTealiumId(p1, p2) {
      return function(i, val) {
        return val.replace(p1, p2);
      }
    }
    

    电话 toggleTealiumId('More', 'Less') 将返回一个函数,其中 p1 p2 跳跃 'More' 'Less' (看一下 How do JavaScript closures work? 有关详细信息,可以将此函数作为参数传递给 attr