jQuery序列化是否有反函数



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

简短回答:,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;
}

(A) 顶部的重置是可选的。您可能需要先重置字段值,或者使用类似的方法清除字段值:https://stackoverflow.com/a/6786237/1766230

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

(C) 有关decodeURIComponent的信息,请参阅Mozilla开发人员Javascript参考。

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

镗孔使用示例:

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

这里有一个jsfiddle,让您可以处理设置值、清除、重置和"反序列化":http://jsfiddle.net/luken/4VVs3/

没有。

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

也许parseJSON会帮助你:

jQuery.parseJSON(json)返回:Object
描述:获取一个格式良好的JSON字符串,并返回生成的JavaScript对象。

这里是:

a=$('.price_analysis input').serializeArray();
aa={};
for (var i in a) {
    aa[a[i].name] = a[i].value;
}
alert( JSON.stringify(aa));

最新更新