- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在使用 body-parser 的 ExpressJS 中,存在将一组输入元素解析为 JavaScript 对象(或 JSON,我不完全确定)的功能具有与已定义键相同的名称属性。
HTML(例如):
<input type="text" class="name" name="name[foo]" placeholder="input1"/>
<input type="text" class="name" name="name[bar]" placeholder="input2"/>
JavaScript(例如):
var obj = req.body.name;
对象 obj
被 JavaScript 理解为 { "foo" : input1, "bar" : input2 }
我正在尝试使用标准 jQuery 来获得类似的功能来处理多个相关的表单输入。到目前为止,我尝试过的方法如下:
$(".name")
产生一个包含文字 HTML 的对象(对获取键值对没有帮助)。
$(".name").map(function () {return $(this).val();}).get();
产生值的数组,但没有键。
$("input[name='name']")
和 $("input[name='name[]']")
什么都没有。
我还尝试了以下将输入转换为数组的方法,但它仍然无法将信息从表单中提取为 JavaScript 对象/JSON:
$.fn.inputsToArray = function () {
var values= [];
$.each(this, function (i, field) {
values.push(field.value);
});
return values;
};
有没有办法在没有 NodeJS/body-parser 的情况下完成我想做的事情?
解决方案:
感谢gaetanoM的优秀解决方案(下面被接受),我能够创建一个可以在任何 jQuery 对象上调用的通用 jQuery 函数(显然,它只有在元素为 <input ... name="example[key]" ... />
格式时才能正常工作,但我离题了) .
这个函数是这样调用的:
var output = $(":input[name^=example]").inputsToObject();
函数定义如下:
$.fn.inputsToObject = function () {
var values = {};
values = $(this).get().reduce(function (acc, ele) {
var key = ele.name.match(/\[(.*)\]$/)[1];
acc[key] = $(ele).val();
return acc;
}, {})
return values;
}
最佳答案
首先你需要$(':input[name^=name]')为了选择具有以名称开头的名称属性的所有输入字段。用.get()您将 jQuery 结果转换为一个数组,您可以在该数组上应用 .reduce() :
var result = $(':input[name^=name]').get().reduce(function(acc, ele) {
var key = ele.name.match(/\[(.*)\]$/)[1]; // get the key
acc[key] = ele.getAttribute('placeholder'); // add to retval
return acc;
}, {});
console.log(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="name" name="name[foo]" placeholder="input1"/>
<input type="text" class="name" name="name[bar]" placeholder="input2"/>
关于javascript - 使用 HTML 输入 'name' 属性生成对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460412/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!