jQuery序列化有反函数吗?

问题描述 投票:0回答:3

我可以写点东西,我在问 jQuery 是否已经内置了一些东西。

jquery serialization reverse
3个回答
19
投票

简短回答:,jQuery 中没有内置的东西可以做到这一点。不知道为什么不...

但是 这里有一个 jQuery plugin 如果您使用

.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) 顶部的reset是可选的。您可能想先重置字段值,或者可能想使用如下方法 clear 它们:https://stackoverflow.com/a/6786237/1766230

(B) 请参阅https://stackoverflow.com/a/24417399/1766230为什么我们需要更换

+

(C) 有关 decodeURIComponent 的信息,请参阅

Mozilla Developer Javascript Reference

(注意:如果您使用

.serializeArray()
或其他方式序列化您的数据,上述方法将不起作用;您可能会发现其中一些解决方案很有用:jQuery 插件序列化表单并恢复/填充形式?)

无聊的用法示例:

var $form = $('form.myFormClass');
var s = $form.serialize();
$form.deserialize(s);

这是一个 jsfiddle,可让您尝试设置值、清除、重置和“反序列化”:http://jsfiddle.net/luken/4VVs3/


1
投票

不,没有。

你怎么知道要更改哪个 DOM 元素?可能有相同名称的相同元素以不同的形式等'.

也许parseJSON会帮助你:

jQuery.parseJSON(json) 返回:对象
描述:采用格式良好的 JSON 字符串并返回生成的 JavaScript 对象。


0
投票

这里是:

a=$('.price_analysis input').serializeArray();
aa={};
for (var i in a) {
    aa[a[i].name] = a[i].value;
}
alert( JSON.stringify(aa));
© www.soinside.com 2019 - 2024. All rights reserved.