jQuery强调为第一个arg函数

时间:2013-04-23 20:48:10

标签: jquery

我有以下代码段:

MARKUP:

<tr name="tr3" id="tr3">
    <td>
        <input type="text" class="common_cls" name="dt[]" id="dt1"> 
    </td>
    <td>
        <input type="hidden" name="fn[]" id="fn1">
        <span id="sp1"><a href="#" id="ah1">choose file</a><span>
        <input type="file" name="fff[]" id="ff">
        <input type="text" style="display:none">
    </td>
</tr>';

JAVASCRIPT

$(document).on('click', '#add_row', function() {
    var row = $("table#DocTable tr:eq(3)");
    row.clone(true)
        .show()
        .find("a, input, span").each(function() {
            $(this)
                .val('')
                .attr('id', function(_, id) {
                    var newcnt = id + count;
                    return id + count;
                });
        })
        .end()
        .appendTo("table");
    count++;

我在一年前写过这篇文章,我对这个问题有所帮助。

下划线的目的是什么作为.attr方法中调用的函数的第一个参数?

该功能究竟如何运作?它是否只是用递增的数字替换所有idaspan标记中的当前input

4 个答案:

答案 0 :(得分:5)

下划线通常用作未命名变量的占位符。基本上,如果您不打算使用该变量,则无需为其找到名称,因此您只需使用下划线即可。

不要与i18n下划线功能或underscore.js混淆。

PS :我不确定这种做法来自何处,但是我第一次看到下划线被用于某些事情时我正在学习Prolog(其中_实际上意味着“任何价值”。

答案 1 :(得分:4)

在这种情况下,当前元素的索引存储在_中。该函数所做的就是用该元素的id + count更新每个元素的属性。如果您将其命名为indexi,您可能会猜到它包含索引..

答案 2 :(得分:3)

这个答案有很多方面,分散在评论和其他答案上。所以,我会尝试在下面合并它们:

首先,在上面提到的代码中,下划线参数的用法如下: -

$(this).val('').attr('id', function(_, id) { return id + i });

attr函数here的jQuery文档中,存在attr的重载形式.attr( attributeName, function )。此表单中的function被描述为

  

类型:函数(整数索引,字符串attr)

因此,它需要两个参数。但是,在我们的代码中,我们只需要id,它恰好是第二个参数。

现在,由于JS处理函数参数的方式,我们不能将其写为function(id),因为JS会将id映射到indexfunction所期望的第一个参数})。因此,我们编写的函数需要有两个参数。

这里,标准惯例发挥作用。如上所述here

  

下划线字符(_)用作指示未使用的函数参数的标准方法。

然而,这只是一个惯例,而不是一个规则。我们也可以将未使用的参数命名为indexunused。也就是说,

$(this).val('').attr('id', function(unused, id) { return id + i });

将是一个有效的等价物。

因此,使用_替换未使用的参数可以用于具有类似重写形式的任何其他jQuery函数。例如,在this回答中,我们可以在调用$.text()时看到下划线的用法。只是为了确认,$.text()有一个重写的表单,它接受一个带有两个参数的函数,如here所示。

答案 3 :(得分:0)

嗯,这只能由作者回答。 _有函数的第一个参数的名称。

基于我可以看到的代码,我猜测,因为_变量根本没有在函数中使用,所以在这个函数中没有必要使用第一个参数,所以它是“存根的” “用_代替随机名称。