2

我有以下代码片段:

标记:

<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 方法中调用的函数的第一个参数的目的是什么?

该功能究竟是如何工作的?它只是用递增的数字替换 current in idalla和tags 吗?spaninput

4

4 回答 4

5

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

不要与 i18n 下划线函数或underscore.js混淆。

PS:我不确定这种做法是从哪里来的,但我第一次看到下划线被用于某些东西是在我学习 Prolog 的时候(这_实际上意味着“任何值”之类的东西)。

于 2013-04-23T20:49:54.470 回答
4

在这种情况下,当前元素的索引存储在_中。该函数所做的只是使用该元素的 id + count 更新每个元素的属性。如果您改为命名它,index或者i您可能已经猜到它包含索引..

于 2013-04-23T20:51:20.467 回答
3

这个答案有很多方面,分散在评论和其他答案中。因此,我将尝试在下面合并它们:

首先,在上述代码中,下划线参数的使用如下:-

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

这里attr的函数的 jQuery 文档中,存在一个重载形式is 。在这种形式中被描述为attr.attr( attributeName, function )function

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

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

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

在这里,一个标准的约定开始发挥作用。正如这里提到的,

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

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

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

将是一个有效的等价物。

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

于 2016-04-18T16:08:47.853 回答
0

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

根据我可以看到的代码,我猜测由于该_变量根本没有在函数中使用,因此该函数中不需要第一个参数,因此它被“存根”_而不是随机姓名。

于 2013-04-23T20:51:29.243 回答