javascript – 如何从JSON对象转换为元素的形式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何从JSON对象转换为元素的形式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2907字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 如何从JSON对象转换为元素的形式?](/upload/InfoBanner/zyjiaocheng/730/5bd92840884a4c228936d32a34a999ab.jpg)
我有一个JSON对象为{a:1,b:2,c:[4,5,6],d:{x:7,y:8,z:[9,0]}},我该如何转换它是一种形式的元素?
我想转换成这个:
<input type="hidden" name="obj[a]" value="1"/>
<input type="hidden" name="obj[b]" value="2"/>
<input type="hidden" name="obj[c][]" value="4"/>
<input type="hidden" name="obj[c][]" value="5"/>
<input type="hidden" name="obj[c][]" value="6"/>
<input type="hidden" name="obj[d][x]" value="7"/>
<input type="hidden" name="obj[d][y]" value="8"/>
<input type="hidden" name="obj[d][z][]" value="9"/>
<input type="hidden" name="obj[d][z][]" value="0"/>
有任何想法吗?
解决方法:
这些应该这样做:
用jQuery
var obj = { a: 1, b: 2, c: [4, 5, 6], d: { x: 7, y: 8, z: [9, 0] } };
function analyzer(o, trail) {
if (!trail) trail = 'obj';
for (var n in o) {
var el = $('<input>', { type: 'hidden' });
el.attr('name', trail + '[' + n + ']');
if (typeof o[n] === 'number') {
el.attr('value', o[n]);
$('body').append(el);
} else if (Array.isArray(o[n])) {
el.attr('name',function(i,v) { return v + '[]'; });
for (var i = 0; i < o[n].length; ++i) {
el.clone().attr('value', o[n][i] ).appendTo('body');
}
} else {
analyzer(o[n], trail + '[' + n + ']');
}
}
}
analyzer(obj);
仅供参考,您可以在MDN上找到Array.isArray的兼容性补丁.
或者你可以使用jQuery.isArray()代替.
jQuery重做了
你可能会喜欢这个.它不会创建一个元素,然后在Array循环中克隆它,而是使用一些冗余代码来创建元素.
function analyzer(o, trail) {
if (!trail) trail = 'obj';
for (var n in o) {
if (typeof o[n] === 'number') {
$('<input>', { type: 'hidden', name: trail + '[' + n + ']', value: o[n] })
.appendTo( 'body' );
} else if (Array.isArray(o[n])) {
for (var i = 0; i < o[n].length; ++i) {
$('<input>', { type: 'hidden', name: trail + '[' + n + '][]', value: o[n][i] })
.appendTo( 'body' );
}
} else {
analyzer(o[n], trail + '[' + n + ']');
}
}
}
使用原生DOM API
如果您遇到任何性能问题,请使用本机API,并缓存DOM选择.
function analyzer(o, trail) {
var el;
if (!trail) trail = 'obj';
for (var n in o) {
if (typeof o[n] === 'number') {
el = document.createElement('input');
el.type = 'hidden';
el.name = trail + '[' + n + ']';
el.value = o[n];
container.appendChild( el );
} else if (Array.isArray(o[n])) {
for (var i = 0; i < o[n].length; ++i) {
el = document.createElement('input');
el.type = 'hidden';
el.name = trail + '[' + n + '][]';
el.value = o[n][i];
container.appendChild( el );
}
} else {
analyzer(o[n], trail + '[' + n + ']');
}
}
}
不需要更多代码,应该在所有通常支持的浏览器中工作,并且应该非常快.
原生API重新缩短以缩短
function analyzer(o, trail) {
var el;
if (!trail) trail = 'obj';
for (var n in o) {
(el = document.createElement('input')).type = 'hidden';
el.name = trail + '[' + n + ']';
if (typeof o[n] === 'number') {
container.appendChild( el ).value = o[n];
} else if (Array.isArray(o[n])) {
el.name += '[]';
for (var i = 0; i < o[n].length; ++i) {
container.appendChild( el.cloneNode(false) ).value = o[n][i];
}
} else {
analyzer(o[n], trail + '[' + n + ']');
}
}
}
内容总结
以上是互联网集市为您收集整理的javascript – 如何从JSON对象转换为元素的形式?全部内容,希望文章能够帮你解决javascript – 如何从JSON对象转换为元素的形式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。