是否有jQuery序列化的反函数?

gar*_*ryM 5 jquery serialization reverse

我可以写一些东西,我在问是否已经在jQuery中构建了一些内容.

Luk*_*uke 16

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

但是这里有一个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;
}
Run Code Online (Sandbox Code Playgroud)

(A)顶部的复位是可选的.您可能希望首先重置字段值,或者可能希望使用以下内容清除它们:https://stackoverflow.com/a/6786237/1766230

(B)请参阅/sf/answers/1709217961/了解我们需要更换的原因+.

(C)有关信息,请参阅Mozilla Developer Javascript ReferencedecodeURIComponent.

(注意:如果您正在使用.serializeArray()或以其他方式序列化您的数据,上述方法将无效;您可能会发现其中一些解决方案很有用:jQuery插件可以序列化表单并还原/填充表单?)

无聊的用法示例:

var $form = $('form.myFormClass');
var s = $form.serialize();
$form.deserialize(s);
Run Code Online (Sandbox Code Playgroud)

这是一个jsfiddle,让你玩弄设置值,清除,重置和"反序列化":http://jsfiddle.net/luken/4VVs3/


gdo*_*ica 1

不,那里没有。

您如何知道要更改哪个 DOM 元素?可能存在不同形式的具有相同名称的相同元素等。

也许parseJSON会帮助你:

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

  • _“不,没有,也不可能”_ - 当然可能有。只需在特定表单上调用(建议的)“deserialize()”方法,值就会返回到该表单。如果有多个同名元素,则应按照序列化版本中重复项的顺序设置这些元素(与 .serialize() 所做的相反)。我已经在多个项目中成功使用了这样的函数(不是使用 jQuery),但要由程序员来确保选择器是正确的...... (5认同)

归档时间:

查看次数:

7114 次

最近记录:

9 年,1 月 前