jquery - 如何从具有数组名称的输入中获取名称和名称键
问题描述
这是html输入:
<input name="item[5689]" type="text" value="abcdefgh"></input>
<input name="item[6535]" type="text" value="abcd1"></input>
<input name="item[9856]" type="text" value="abcd"></input>
所以需要这种类型的数组来进行后 ajax 调用:
5689 => abcdefgh
6535 => abcd1
9856 => abcd
jquery 是如何实现的?
在这里我尝试但没有成功:
$("input[name='item[^]']").each(function() {
console.log("Name: " + this.name + ", index: " + $(this).index());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input name="item[5689]" type="text" value="abcdefgh"></input>
<input name="item[6535]" type="text" value="abcd1"></input>
<input name="item[9856]" type="text" value="abcd"></input>
解决方案
不幸的是,没有属性匹配表达式选择器,所以你最好的选择是......
- 查找所有元素(按属性开头 - 选择器)
- 过滤它们以确保它们符合预期的格式
- 从名称中提取输入值和键并将它们映射到条目
- 将其减少到您想要的对象结果
const rx = /^item\[(.+?)]$/
const result = Object.fromEntries(
jQuery("input[name^='item[']")
.filter((_, { name }) => rx.test(name))
.map((_, { name, value }) => [[ name.match(rx)[1], value ]])
.get())
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input name="item[5689]" type="text" value="abcdefgh">
<input name="item[6535]" type="text" value="abcd1">
<input name="item[9856]" type="text" value="abcd">
jQuery.map()
似乎将数组展平,因此[[...]]
它适合于Object.fromEntries()
推荐阅读
- c# - 通过 TwinCAT ADS 读取值,无需声明 PLC 变量
- wordpress - 如果选择了一个字段,则排除一个块?
- php - 在使用 route53 在云端连接后,Amazon Ec2 上的 Ci3 会话数据出现问题。在公共 DNS 上启动时工作
- javascript - 这两个事件监听回调的添加方式有什么区别?函数 VS 箭头函数调用函数
- javascript - 如何使用中间带“-”的对象键
- java - Android Studio SQLite 光标循环
- r - R:使用嵌套数据结构将不同长度的输入传递给 purrr
- r - 在 R 中创建具有集节点位置和集中边的网络图,同时带有圆头和箭头
- python - Python2.7 TypeError: coercing to Unicode: need string or buffer, NoneType found
- flutter - 如何避免finddropdown颤动中的溢出