2012-03-24 8 views
4

Ich kann etwas schreiben, ich frage, ob etwas in jQuery bereits eingebaut ist.Gibt es eine umgekehrte Funktion zu jQuery serialize?

+1

könnte es sein, aber es hängt vom Kontext des Problems, die Sie haben nicht gesagt, uns. Was versuchst du zu machen? – Bojangles

+0

Vielleicht hilft das: http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript – stewe

+0

Dank ich wollte nur faul sein .. Ich habe nie verstanden, Hwy machen eine bequeme Funktionen und nicht Stellen Sie die inverse .. Prost :) – garyM

Antwort

1

Nein, gibt es nicht.

Woher wissen Sie, welches DOM-Element geändert werden soll? Es könnte die gleichen Elemente mit dem gleichen Namen in verschiedenen Formen usw. geben.

jQuery.parseJSON (json) Gibt: Object
Beschreibung:

parseJSON werden Ihnen vielleicht helfen, ein JSON Takes-Wanne ausgebildet String und gibt das resultierende Objekt JavaScript.

+0

Danke ... jQuery.serialize verwendet die Namen Attribute, um das Element und den Wert zu serialisieren. Das ist neben der URI Codierung und Verpackung. Der Prozess kehrt sich relativ leicht um. Ich bin neu bei Javascript-Ad jQuery, ich dachte nur, dass ich etwas im Doc fehlt. Ich muss in die Kugel beißen und nach JSON gehen – garyM

+3

_ "Nein, es gibt nicht, und kann nicht sein" _ - sicher könnte es sein. Rufen Sie einfach die (vorgeschlagene) 'deserialize()' Methode für ein bestimmtes Formular auf und die Werte würden zu diesem Formular zurückgehen. Wenn es mehr als ein Element mit demselben Namen gibt, sollten diese in der Reihenfolge von den Duplikaten in der serialisierten Version gesetzt werden (die Umkehrung dessen, was 'serialize()' tut). Ich habe eine solche Funktion erfolgreich bei mehreren Projekten verwendet (nicht bei jQuery), aber es liegt am Programmierer, sicherzustellen, dass die Selektoren richtig sind ... – nnnnnn

+0

@nnnnnn. Du hast Recht, es könnte eine unsichere Version davon geben. Aber jQuery (soweit ich weiß) hat keine unsicheren Funktionen. Er kann das erste schreiben, wenn er möchte ... – gdoron

13

Kurze Antwort: Nein , gibt es nicht etwas built into jQuery dies zu tun. Nicht sicher, warum nicht ...

Aber hier ist ein jQuery-Plugin , die den Trick tun sollten, wenn Sie .serialize() verwenden eine serialisierte Zeichenfolge zu erhalten:

$.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 an der Spitze ist optional. Möglicherweise möchten Sie zuerst die Feldwerte zurückgesetzt werden, oder wünschen können klar sie so etwas wie dies mit: https://stackoverflow.com/a/6786237/1766230

(B) Siehe https://stackoverflow.com/a/24417399/1766230 warum wir + ersetzen müssen.

(C) Siehe Mozilla Developer Javascript Reference für Informationen über decodeURIComponent.

(Hinweis: Wenn Sie .serializeArray() oder eine andere Art und Weise unter Verwendung Ihrer Daten serialisieren, wird die oben nicht funktionieren, Sie nützlich, einige dieser Lösungen finden können: jQuery plugin to serialize a form and also restore/populate the form?)

Boring Verwendungsbeispiel:

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

Hier ist ein jsfiddle das sind Sie mit Einstellwerten rumspielen lassen, Clearing, Zurücksetzen und „Deserialisieren“: http://jsfiddle.net/luken/4VVs3/

+0

Tolle Geige danke, dass du dir die Zeit genommen hast, das zu machen/zu verlinken. – Tom