【问题标题】:Jquery : How to get all value of inputs element with array names?Jquery:如何使用数组名称获取输入元素的所有值?
【发布时间】:2019-05-30 21:00:46
【问题描述】:

我的 html 代码如下所示:

<input type="text" name="fruits[apple]" value="true">
<input type="text" name="fruits[orange]" value="false">
<input type="text" name="fruits[mango]" value="true">

如何选择所有水果并获得它们各自的值?我正在寻找类似的对象

{
  "apple": true,
  "orange": false,
  "mango": true
}

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

您可以选择以fruits[ 开头的元素,并映射到它们的值:

const vals = $('[name^="fruits["]')
  .map((_, input) => input.value)
  .get();
console.log(vals);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" name="fruits[apple]" value="true">
<input type="text" name="fruits[orange]" value="false">
<input type="text" name="fruits[mango]" value="true">

请记住,输入的.value字符串 - 如果您需要布尔值,则必须更明确地这样做:

const vals = $('[name^="fruits["]')
  .map((_, input) => input.value === 'true')
  .get();
console.log(vals);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" name="fruits[apple]" value="true">
<input type="text" name="fruits[orange]" value="false">
<input type="text" name="fruits[mango]" value="true">

如果您还需要name 的唯一部分,则将reduce 放入键值对对象中(如果使用reduce,还可以删除jQuery):

const vals = [...document.querySelectorAll('[name^="fruits["]')]
  .reduce((a, { name, value }) => {
    const key = name.match(/[^[]+(?=\])/)[0];
    a[key] = value === 'true';
    return a;
  }, {});
console.log(vals);
<input type="text" name="fruits[apple]" value="true">
<input type="text" name="fruits[orange]" value="false">
<input type="text" name="fruits[mango]" value="true">

【讨论】:

  • 哇!不敢相信,你真的很快。我将不得不等待 12 分钟才能接受这个答案。大声笑
  • 我想将它们作为键值对格式。水果['苹果' => 真,'芒果' => 假]
  • 改用reduce,此时还不如去掉jQuery
  • @Tintin 我会问,如果你想用这样的对象键来格式化它们,为什么要使用不这样的名称来构建 html?
猜你喜欢
  • 2014-08-21
  • 2021-03-21
  • 1970-01-01
  • 2010-12-19
  • 2011-01-25
  • 2011-08-23
  • 2016-01-11
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多