$.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;
}
3条答案
按热度按时间toiithl61#
简短回答:不,没有built into jQuery可以做这个。不知道为什么不...
*但是*这里有一个jQuery插件,如果你使用
.serialize()
来获取一个序列化的字符串,它应该可以做到这一点:(A)顶部的reset是可选的。您可能希望首先重置字段值,或者可能希望使用以下方法清除它们:https://stackoverflow.com/a/6786237/1766230
(B)请参阅https://stackoverflow.com/a/24417399/1766230了解为什么需要替换
+
。(C)有关
decodeURIComponent
的信息,请参阅Mozilla Developer Javascript Reference。(Note:如果您使用
.serializeArray()
或其他方法来序列化数据,则上述方法将不起作用;您可能会发现其中一些解决方案很有用:jQuery plugin to serialize a form and also restore/populate the form?)镗孔使用示例:
这里有一个jsfiddle,可以让你玩设置值,清除,重置和“反序列化”:http://jsfiddle.net/luken/4VVs3/
e7arh2l62#
不,没有。
你怎么知道要修改哪个DOM元素呢?可能有相同的元素,但它们的名字不同,等等。
parseJSON可以帮助您:
jQuery.parseJSON(json)返回:对象
说明:接受格式良好的JSON字符串并返回结果JavaScript对象。
bnlyeluc3#
这里是: