2012-03-24 45 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