【发布时间】:2019-07-17 11:50:16
【问题描述】:
我正在尝试从我的表单中提取所有数据并将其转换为 queryString,然后发布到端点。
这是我到目前为止所拥有的,但是我无法找到一种快速而干净的方法来将其转换为例如:key=value&key=value。
let data = Array.from(this.querySelectorAll('input:not([type="submit"]), select, textarea')).map(input => {
let value = '';
switch(input.tagName) {
case 'INPUT':
value = input.value;
break;
case 'SELECT':
value = input[input.selectedIndex].value;
break;
case 'TEXTAREA':
value = input.innerHTML;
break;
}
return {
key: input.name,
value: value
};
});
console.log(data);
// Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&');
上面的代码创建了一个对象数组,其中包含键和值。能够使用上面注释掉的一个衬里会很好。
【问题讨论】:
-
你不需要那个
switch。this.value适用于所有三种情况。 -
将
.innerHTML用于<textarea>是不正确的;只是.value。此外,您可能应该测试disabled元素的完整性。 -
be nice to be able use the one liner->data.map(({key, value}) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
标签: javascript