将多个参数传递给jQuery函数

问题描述 投票:3回答:4

我有一个函数,它从各种输入(多个值)获取数据并填充到表中。

这是jquery片段:

var row =1   
$("input[name='product_id[]']").each(function() {               
        $rows[row].cells[0].innerText = $(this).val();      
        row = row+1;
    });

    row=1;
    $("input[name='product_name[]']").each(function() {             
        $rows[row].cells[1].innerText = $(this).val();      
        row = row+1;
    });

    row=1;
    $("input[name='manufacturer[]']").each(function() {             
        $rows[row].cells[2].innerText = $(this).val();      
        row = row+1;
    });

    row=1;
    $("input[name='composition[]']").each(function() {              
        $rows[row].cells[3].innerText = $(this).val();      
        row = row+1;
    });

我想知道我是否可以将多个迭代器组合到一个迭代器中?

谢谢Kiran

javascript jquery each
4个回答
3
投票

您可以用逗号加入选择器:

$("input[name='product_id[]'], input[name='product_name[]'], input[name='manufacturer[]'], input[name='composition[]']")
.each(function() {
  // ...
});

要更干,请使用数组:

const selectorStr = ['product_id', 'product_name', 'manufacturer', 'composition']
  .map(str => `input[name='${str}[]']`)
  .join(',');
$(selectorStr).each(function() {
  // ...
});

如果除了第一次迭代之外你需要row成为1,那么:

['product_id', 'product_name', 'manufacturer', 'composition']
  .forEach((str, i) => {
    if (i !== 0) {
      row = 1;
    }
    $(`input[name='${str}[]']`).each(function(){
      // etc
    });
  });

3
投票

创建一个通用函数,这将有助于您的行逻辑,它在每次迭代之前获得值1

function iteratorOperation(){
}

然后将其传递给迭代器,

$("input[name='product_id[]']").each(iteratorOperation);

row=1;
$("input[name='product_name[]']").each(iteratorOperation);

row=1;
$("input[name='manufacturer[]']").each(iteratorOperation);

row=1;
$("input[name='composition[]']").each(iteratorOperation);

1
投票

使用,分隔多个选择器

$("input[name='product_id[]'],input[name='product_name[]'],input[name='manufacturer[],input[name='composition[]']").each(function() {               

});

1
投票

也许这很有意思?

注意逃避[]

const fieldNames = ["product_id[]", "product_name[]", "manufacturer[]", "composition[]"];
const selector = fieldNames.map(item => `input[name='${item}\\\\[\\\\]']`).join(", ")
$rows.each((row) => { // not sure if $rows is a jQuery object or html collection
  $(selector).each(() => {
    let idx = fieldNames.indexOf(this.name)
    row.cells[idx].innerText = $(this).val(); // jquery object or collection?
  })
})
© www.soinside.com 2019 - 2024. All rights reserved.