2012-03-24 48 views
4

我可以写点东西,我问是否已经内置到jQuery中。jQuery序列化有反函数吗?

+1

可能有,但要看你的问题,你还没有告诉上下文我们。你想做什么? – Bojangles 2012-03-24 23:29:47

+0

也许这有助于:http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript – stewe 2012-03-24 23:30:54

+0

谢谢我只是想懒惰..我只是从来没有理解hwy使一个方便的功能,而不是提供反向..干杯:) – garyM 2012-03-25 00:10:38

回答

1

不,没有。

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

也许parseJSON将帮助您:

jQuery.parseJSON(JSON)返回:对象
说明:取一个结构良好的JSON字符串,并返回结果的JavaScript对象。

+0

谢谢... jQuery.serialize使用名称属性来序列化元素和值。这是除了URI编码和打包。这个过程相当容易逆转。我是新来的JavaScript广告jQuery,我只是觉得我在文档中丢失了一些东西。我必须咬下子弹,然后转移到json – garyM 2012-03-25 00:07:36

+3

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

+0

@nnnnnn。你是对的,可能会有一个不安全的版本。但是jQuery(尽我所知)没有不安全的函数。他可以写第一个,如果他喜欢... – gdoron 2012-03-25 05:40:57

13

简答:没有,没有东西built into 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; 
} 

(一) 重置在顶部是可选的。您可能需要首先复位的字段值,或明确他们使用这样的事情可能要:https://stackoverflow.com/a/6786237/1766230

(B)查看https://stackoverflow.com/a/24417399/1766230为什么我们需要更换+

(C)有关decodeURIComponent的信息,请参阅Mozilla Developer Javascript Reference

(注:如果您使用.serializeArray()或一些其他的方式来序列数据,上面的都不行,你会发现这些解决方案有用的:jQuery plugin to serialize a form and also restore/populate the form?

镗用法示例:

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

这里是一个让你玩的设定值,结算,重置的jsfiddle和“反序列化”:http://jsfiddle.net/luken/4VVs3/

+0

大提琴感谢您花时间做出/链接。 – Tom 2016-09-29 01:40:10