Javascript 过滤jquery输入中的名称

Javascript 过滤jquery输入中的名称,javascript,jquery,Javascript,Jquery,我有一段代码,它选择了所有包含“record_”的文本字段 但是名为“record_1、record_2和record_3”的字段必须是*8,而不是*1 如何过滤搜索,使其只查找数字在3之后的记录? 我尝试了一个IF函数,但我执行上述代码的方式意味着“record_15”将是*8,而不是*1。 我知道这应该很简单,但我无法控制它。这很有效: $('input[name^="record_"]').each(function() { total += this.value * (parse

我有一段代码,它选择了所有包含“record_”的文本字段

但是名为“record_1、record_2和record_3”的字段必须是*8,而不是*1

如何过滤搜索,使其只查找数字在3之后的记录? 我尝试了一个IF函数,但我执行上述代码的方式意味着“record_15”将是*8,而不是*1。 我知道这应该很简单,但我无法控制它。

这很有效:

$('input[name^="record_"]').each(function() {
    total += this.value * (parseInt(this.name.substr(7),10)<4 ? 8 : 1);
});
$('input[name^=“record”]')。每个(函数(){
total+=this.value*(parseInt(this.name.substr(7),10)此操作:

$('input[name^="record_"]').each(function() {
    total += this.value * (parseInt(this.name.substr(7),10)<4 ? 8 : 1);
});
$('input[name^=“record”]')。每个(函数(){
total+=this.value*(parseInt(this.name.substr(7),10)您可以执行以下操作:

$('input[name^="record_"]').map(function() { 
    var name = this.name;
    var number = name.replace('record_', '')
    if (number > 3){
         total += $(this).val() * 1; 
    }else{
         total += $(this).val() * 8; 
    }
    console.log(number);


});
你可以做:

$('input[name^="record_"]').map(function() { 
    var name = this.name;
    var number = name.replace('record_', '')
    if (number > 3){
         total += $(this).val() * 1; 
    }else{
         total += $(this).val() * 8; 
    }
    console.log(number);


});
试试这个:

$( 'input[name^="record_"]' ).each(function () {
    var n = +this.name.split( '_' )[1];
    total += this.value * ( n > 3 ? 1 : 8 );
});
现场演示:

试试这个:

$( 'input[name^="record_"]' ).each(function () {
    var n = +this.name.split( '_' )[1];
    total += this.value * ( n > 3 ? 1 : 8 );
});

实时演示:

不是你问题的答案,只是一个提示:你应该使用
每一个
而不是
映射
映射
用于将jQuery对象转换为数组,而
每一个
都只需遍历DOM元素并在其上运行提供的函数。欢迎这个提示,我将在未来尝试这样做reNot关于你的问题的答案,只是一个提示:你应该使用
each
而不是
map
map
用于将jQuery对象转换为数组,而
each
只需遍历DOM元素并在其上运行提供的函数。谢谢提示,我以后会尝试这样做(1)
each
而不是
map
更合适;(2)
this.value
而不是
$(this.val()
性能更好,可读性更强;(3)将基数
10
传递到
parseInt
;(4)
this.name
而不是
$(this.attr('name')
-原因与(2)相同@Šime:你说的每一点都是对的。我会更新我的代码,也会更新你的答案。(1)
each
而不是
map
更合适;(2)
this.value
而不是
$(this)。val()
性能更好,可读性更强;(3)将基数
10
传递到
parseInt
;(4)
this.name
而不是
$(this.attr('name')
-与(2)@Šime的理由相同:你说的每一点都是对的。我会更新我的代码,并更新你的答案。只是好奇——为什么要在“loop”函数中创建一个局部变量?只是为了可读性?(这不是一个完全有效的理由)@Jens:是的,为了可读性。我经常想在局部变量的末尾添加注释来解释这些值。还要注意的是,局部变量非常便宜,可以大量使用它们来提高代码的可读性。局部变量很便宜,但我仍然倾向于在循环和递归函数中避免它们,但这并不意味着使代码可读性降低,并且在许多情况下增益是negligible@Jens请注意,“在循环中声明变量”在JavaScript中不存在。JavaScript没有块作用域,所有局部变量都是预先创建的(=在执行上下文初始化期间,在计算任何语句之前)。因此,在循环中使用
var x=…;
相当于在该循环中使用常规赋值
x=…;
。因此,循环中的变量语句是错误的,因为这些变量不会在每次迭代中重复声明。@Jens但即使在lo中使用变量声明哎呀,这样就不会有任何性能成本。不过很奇怪——为什么要在“loop”函数中创建一个局部变量?只是为了可读性?(这不是一个完全正确的理由)@Jens:是的,为了可读性。我经常想在局部变量的末尾添加注释来解释这些值。还要注意的是,局部变量非常便宜,可以大量使用它们来提高代码的可读性。局部变量很便宜,但我仍然倾向于在循环和递归函数中避免它们,但这并不意味着使代码可读性降低,并且在许多情况下增益是negligible@Jens请注意,“在循环中声明变量”在JavaScript中不存在。JavaScript没有块作用域,所有局部变量都是预先创建的(=在执行上下文初始化期间,在计算任何语句之前)。因此,在循环中使用
var x=…;
相当于在该循环中使用常规赋值
x=…;
。因此,循环中的变量语句是错误的,因为这些变量不会在每次迭代中重复声明。@Jens但即使在lo中使用变量声明哦,不会有任何性能成本,因为这一点。