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
太…