我做了这个辅助函数来帮助我解决问题
function formToObject(form) {
var items = form.querySelectorAll("[name]");
var json = "{";
for (var i = 0; i < items.length; i++) {
json += '"' + items[i].name + '":"' + items[i].value + '",';
}
json = json.substring(0, json.length-1) + "}";
return JSON.parse(json);
}
但它存在问题,它不会排除传递给它的表单元素内部的表单。之前没有出现,但现在似乎是必要的。有没有办法以一种方式编写选择器字符串,以便排除其中任何其他形式的子节点?
喜欢“[name]:not(form *)”(显然不起作用)
编辑:与“[name]:not(fieldset)*”稍微靠近但是也忽略了直接的fieldset子项