jQuery序列化是否有反函数?
我可以写一些东西,我在问jQuery是否已经内置了一些东西 没有 您如何知道要更改哪个DOM元素?可能有相同的元素以不同的形式具有相同的名称等 也许会帮助你: parseJSON(json)返回:ObjectjQuery序列化是否有反函数?,jquery,serialization,reverse,Jquery,Serialization,Reverse,我可以写一些东西,我在问jQuery是否已经内置了一些东西 没有 您如何知道要更改哪个DOM元素?可能有相同的元素以不同的形式具有相同的名称等 也许会帮助你: parseJSON(json)返回:Object 描述:获取格式良好的JSON字符串并返回结果JavaScript对象 简短回答:不,没有什么可以做的。不知道为什么不 但是这里有一个jQuery插件,如果您使用.serialize()获取序列化字符串,它应该会起到作用: $.fn.deserialize = function (seria
描述:获取格式良好的JSON字符串并返回结果JavaScript对象
简短回答:不,没有什么可以做的。不知道为什么不 但是这里有一个jQuery插件,如果您使用
.serialize()
获取序列化字符串,它应该会起到作用:
$.fn.deserialize = function (serializedString)
{
var $form = $(this);
$form[0].reset(); // (A) optional
serializedString = serializedString.replace(/\+/g, '%20'); // (B)
var formFieldArray = serializedString.split("&");
// Loop over all name-value pairs
$.each(formFieldArray, function(i, pair){
var nameValue = pair.split("=");
var name = decodeURIComponent(nameValue[0]); // (C)
var value = decodeURIComponent(nameValue[1]);
// Find one or more fields
var $field = $form.find('[name=' + name + ']');
// Checkboxes and Radio types need to be handled differently
if ($field[0].type == "radio" || $field[0].type == "checkbox")
{
var $fieldWithValue = $field.filter('[value="' + value + '"]');
var isFound = ($fieldWithValue.length > 0);
// Special case if the value is not defined; value will be "on"
if (!isFound && value == "on") {
$field.first().prop("checked", true);
} else {
$fieldWithValue.prop("checked", isFound);
}
} else { // input, textarea
$field.val(value);
}
});
return this;
}
(A) 顶部的重置是可选的。您可能希望首先重置字段值,或者可能希望使用如下方法清除字段值:
(B) 请参阅,了解我们需要更换+
的原因
(C) 有关decodeURIComponent
的信息,请参阅
(注意:如果您正在使用.serializeArray()
或其他方式序列化数据,上述方法将不起作用;您可能会发现其中一些解决方案很有用:)
无聊的用法示例:
var $form = $('form.myFormClass');
var s = $form.serialize();
$form.deserialize(s);
这里有一个JSFIDLE,让您可以随意设置值、清除、重置和“反序列化”:可能有,但这取决于您的问题的上下文,您没有告诉我们。你想做什么?也许这有帮助:谢谢,我只是想偷懒。。我只是不明白为什么要做一个方便的函数而不提供相反的结果。。干杯:)谢谢。。。serialize使用name属性序列化元素和值。这是除了URI编码和打包之外的。这个过程很容易逆转。我是javascript ad jQuery新手,我只是觉得我在文档中遗漏了一些东西。我必须咬紧牙关,转向json“不,没有,也不可能”——肯定会有。只需在特定表单上调用(建议的)
反序列化()
方法,值就会返回到该表单。如果有多个元素具有相同的名称,则应按照序列化版本中重复项的顺序设置这些元素(与.serialize()
的操作相反)。我已经在多个项目上成功地使用了这样一个函数(不是jQuery),但这取决于程序员来确保选择器是正确的…@nnnnnn。你说得对,可能有不安全的版本。但是jQuery(据我所知)没有不安全的函数。如果他愿意的话,他可以写第一个……非常感谢您花时间制作/链接。这在名称属性中使用方括号输入时失败,如
。使用'[name=“'+name+']”]
来支持这样的输入。