Javascript 非容器内的选择器语法
我做了这个助手函数来帮助我处理一些东西Javascript 非容器内的选择器语法,javascript,html,Javascript,Html,我做了这个助手函数来帮助我处理一些东西 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
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);
}
函数formToObject(表单){
var items=form.queryselectoral(“[name]”);
var json=“{”;
对于(变量i=0;i
但是它有一个问题,它不排除传递给它的表单元素中的表单。以前没提过,但现在看来有必要了。有没有一种方法可以写入选择器字符串,使其排除其中任何其他形式的子元素
比如“[姓名]:not(form*)”(显然不起作用)
编辑:使用“[name]:not(fieldset)*”稍微接近了一点,但这也忽略了直接的字段集子项不是选择器,但您可以使用它过滤掉for循环中的那些元素。顺便说一句,手工组装JSON字符串(从一开始就不是一个好方法),然后在函数返回之前对其进行解码,这有什么意义?如果你想要一个数组或对象,那么首先创建一个……这不回答你的问题,但可能认为这是无效的。您永远不应该有“子”窗体。“[name]:不是(form form[name])”@CBroe,但是如果我事先不知道属性名称,如何以通用方式创建对象?我不能使用obj[“someval”]等。因为这个函数需要一个属性不是kvpBasic JS知识的对象:
obj[“foo”]=x
可以写成var key=“foo”;obj[key]=x
太…