JavaScript div同名输入序列化为json数组

标签 javascript jquery json

我有以下 html :

<div id="formdata">

<input type='hidden' name='item_name' value='1001-UMBRELLA'/>
<input type='hidden' name='item_name' value='1002-UMBRELLA'/>
<input type='hidden' name='item_name' value='1003-UMBRELLA'/>

<input type='hidden' name='rate' value='20.00'/>
<input type='hidden' name='rate' value='40.00'/>
<input type='hidden' name='rate' value='60.00'/>

<input type='hidden' name='quantity' value='10.00'/>
<input type='hidden' name='quantity' value='20.00'/>    
<input type='hidden' name='quantity' value='30.00'/>

</div>

我想要以 JSON 形式获取的是:

[{'item_name':'1001-UMBRELLA', 'quantity':'10', 'rate':'20'}, 
{'item_name':'1002-UMBRELLA', 'quantity':'20', 'rate':'40'},
{'item_name':'1003-UMBRELLA', 'quantity':'30', 'rate':'60'}]

我尝试过 .serializeArray() ,它以名称值对的形式提供输出,呈现以下输出:

[{'name':'item_name','value':'1001-UMBRELLA'},{'name':'item_name','value':'1002-UMBRELLA'},{'name':'item_name','value':'1003-UMBRELLA'},{'name':'rate','value':'20.00'},{'name':'rate','value':'40.00'},{'name':'rate','value':'60.00'},{'name':'quantity','value':'10.00'},{'name':'quantity','value':'20.00'},{'name':'quantity','value':'30.00'}]

通过数据模型绑定(bind)可以更好地实现这一点吗?

最佳答案

根据输入元素的结构,您可以使用.map().querySelectorAll()

var retVal = Array.from(document.querySelectorAll("#formdata input[name='item_name']")).map(function(ele) {
    var x = {};
    x[ele.name] = ele.value;
    x[ele.nextElementSibling.name] = Number(ele.nextElementSibling.value).toString();
    x[ele.nextElementSibling.nextElementSibling.name] = Number(ele.nextElementSibling.nextElementSibling.value).toString();
    return x;
});

console.log(retVal);
<div id="formdata">
    <input type='hidden' name='item_name' value='1001-UMBRELLA'/>
    <input type='hidden' name='quantity' value='10.00'/>
    <input type='hidden' name='rate' value='20.00'/>

    <input type='hidden' name='item_name' value='1002-UMBRELLA'/>
    <input type='hidden' name='quantity' value='20.00'/>
    <input type='hidden' name='rate' value='40.00'/>

    <input type='hidden' name='item_name' value='1002-UMBRELLA'/>
    <input type='hidden' name='quantity' value='30.00'/>
    <input type='hidden' name='rate' value='60.00'/>
</div>

关于JavaScript div同名输入序列化为json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129227/

相关文章:

python - 如何在 Python 中将 JSON 文件目录加载到 Apache Spark

javascript - 为什么 backgroundColor=rgb(a,b,c) 不起作用?

javascript - 在资源管理器和 firefox 中检测显示器分辨率

jquery - Json ajax 带参数传递

c# - 如何在没有附加类的情况下解析 json?

ruby-on-rails - 带有 json 列参数的范围

javascript - Protractor 测试非常慢并且经常超时

javascript - ScrollView snapToInterval 和 snapToAlignment 不适用于文本元素列表

javascript - Jest/React 模拟 scrollBy 和 .getBoundingClientRect 函数

javascript - Haml form_tag 正在破坏 javascript