2009-08-03 2 views
1

ich die folgenden DOM-Struktur haben ..Wie serialisiert JSON eine Menge versteckter Eingabewerte (jQuery kann verwendet werden)?

<input id="WorkAssignmentID_3462" type="hidden" value="3462" name="WorkAssignmentID"/> 
<input id="WorkItemID_3462" type="hidden" value="3633" name="WorkItemID"/> 
<input id="EmployeeID_3462" type="hidden" value="15" name="EmployeeID"/> 
<input id="AssignedBy_3462" type="hidden" value="Jonathan Erickson" name="AssignedBy"/> 
<input id="AssignedDate_3462" type="hidden" value="8/1/2009 12:00:00 AM" name="AssignedDate"/> 
<input id="ExpirationDate_3462" type="hidden" value="" name="ExpirationDate"/> 
<input id="RegisteredDate_3462" type="hidden" value="8/1/2009 12:00:00 AM" name="RegisteredDate"/> 

können nur sagen, die jQuery-Selektor alle diese DOM-Elemente zu erhalten, ist die folgende:

$('#assignment'); 

und was ich will zu tun ist ein erstellen JSON-Objekt aus diesem Satz:

var WA = { 
    WorkAssignmentID: '3462', 
    WorkItemID: '3633', 
    EmployeeID: '15', 
    AssignedBy: 'Jonathan Erickson', 
    AssignedDate: '8/1/2009 12:00:00 AM', 
    ExpirationDate: '', 
    RegisteredDate: '8/1/2009 12:00:00 AM', 
}; 

was wäre der einfachste Weg, das zu tun?

Ich dachte an etwas wie das, aber es funktioniert nicht, weil ich nicht denke, dass Sie die Eigenschaft des JSON-Objekts dynamisch erstellen können ... ist es möglich, den Eigenschaftsnamen dynamisch zu erstellen?

var WA = {}; 

$('#assignment').each(function(idx, elem) { 
    $.extend(WA, { 
        $(elem).attr('name'): $(elem).val() 
       }); 
}); 

Antwort

3

Was ist das, das bracket notation mit:

var result = {}; 

$('input[type=hidden]').each(function() { 
    result[this.name] = this.value; 
}); 
+0

danke, ich war definitiv über-Komplizierung der Lösung haha. –

+0

Vorsicht, hier kann 'this' explizit brechen, abhängig vom Kontext, der den obigen Code ausführt. Aus diesem Grund stellt $ .each() das Element als Argument für den Callback bereit. –

+0

Nein, im Kontext der Callback-Funktion * ist dieses * immer das DOM-Element, da intern jQuery die Callback-Funktion Usin Call aufruft: 'callback.call (Objekt [Name], Name, Objekt [Name])', check die jede Funktionsimplementierung in jquery-1.3.2.js (Zeile 672). – CMS

2

$ .extend() Aufruf ist übertrieben, IMO. Aber Sie haben den grundlegenden Ansatz, den ich verwenden würde

var WA = {}; 
$('input[type="hidden"]').each(function(idx, elem) 
{ 
    WA[elem.name] = elem.value; 
} 
Verwandte Themen