[英]How to get all input-fields with same name-tag as array (jQuery)
是否可以獲取與數組具有相同名稱標簽的所有輸入字段並使用方括號中的字符串作為鍵? 例子:
<input type="hidden" name="hidden[idPub]" disabled="disabled">
<input type="hidden" name="hidden[idPri]" disabled="disabled">
<textarea name="hidden[description]" style="height:75px;length:auto;display:block;" class="form-control" >'</textarea>
結果應該是這樣的:
hidden =>
"idPub" => 123,
"idPri" => 321,
"description" => 'test'
我的實際解決方案:
var formData = [];
$("input[name^='hidden[']").each(function()
{
formData[$(this).attr('name').replace('hidden[','').replace(']', '')] = $(this).val();
});
提前致謝。
const formData = {};
const elements = Array.from(document.querySelectorAll("input[type=hidden]"));
elements.forEach(el => {
const key = el.getAttribute('name');
var matches = key.match(/\[(.*?)\]/);
if (matches) {
var val = matches[1];
formData[val] = el.value;
}
});
console.log(formData);
因為您使用的是命名鍵, formData
應該是一個object ,而不是一個數組。
var formData = {};
// ^^
此外,您的選擇器僅針對<input>
元素; 您還需要為<textarea>
添加一個選擇器。
$("input[name^='hidden['],textarea[name^='hidden[']")
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
var formData = {}; $("input[name^='hidden['],textarea[name^='hidden[']").each(function() { formData[$(this).attr('name').replace('hidden[', '').replace(']', '')] = $(this).val(); }); console.log(formData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="hidden" name="hidden[idPub]" value="123"> <input type="hidden" name="hidden[idPri]" value="321"> <textarea name="hidden[description]">test</textarea>
您也可以使用正則表達式執行此操作。
var hidden = {};
$('input,textarea').filter(function(){
return this.name.match(/(hidden)\[(.*?)\]/g);
}).each(function() {
hidden[$(this).attr('name').replace('hidden[', '').replace(']', '')] = $(this).val();
});
console.log(hidden);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.