2017-08-28 3 views
0

Ich bin auf der Suche nach Daten eines HTML-Elements (ein JSON-Datensatz) und schieben Sie es in ein Array in JavaScript.JSON-Element drängt in Array in Javascript

Die HTML ist:

<td class="card-holder" data-card="{"id":0,"type":"Wildcard","image":"wildcard.png","strength":0,"type_image":"wildcard.png","region_owned_adder":0}"> 
     <img id="card-image-0" src="/img/wildcard.png" class="card-exchange"> 
     <input class="cards-checkbox" type="checkbox" id="card-0" name="cards_to_exchange[]" value="id=" 0""=""> 
     <label for="cards_to_exchange"></label> 
</td> 

Ich habe eine Reihe von ihnen auf meiner Seite. Ich habe gelesen, die jeweils in einer Schleife und wählen Sie einige, wie diese in ein Array drücken:

var cards = []; 
$('.card-exchange').each(function() { 
    if ($(this).find('input[name="cards_to_exchange[]"]').is(':checked')) { 
     var parseCard = JSON.parse(thisElement.data('card')); 
     cards.push(parseCard); 
    } 
}); 

Aber das zeigt mir [] nach der Schleife:

console.log(cards); 

Das die Daten OK zeigt:

console.log(thisElement.data('card')); 

Wie lese ich die Zeichenfolge und schieben Sie es als Objekt in Array? Vielen Dank.

+0

'$ (this) .find ('input [name = "cards_to_exchange []"]') wird (': checked').:' 'Input [type = 'wahrscheinlich – Isaac

+0

Variante # 1 schlägt fehl checkbox] '', Variante # 2:'' Eingabe [Name^= "cards_to_exchange"] ''. –

Antwort

3

Sie verwenden .find() auf einem , der keine Nachkommen hat.

Verwenden Sie stattdessen .next(), um seine <input> Geschwister zu erhalten.


Auch können Sie .filter() und verwenden Sie dann .map() es ein wenig aufzuräumen.

var cards = $('.card-exchange').filter(function() { 
    return $(this).next().is(':checked'); 
}).map(function() { 
    return JSON.parse(thisElement.data('card')); 
}).toArray(); 

Obwohl ich nicht sicher bin, was thisElement bezieht sich auf.


Sie könnten es sogar ein wenig mehr verkürzen.

var cards = $('.card-exchange + input:checked') 
    .prev() 
    .map(function() { 
    return JSON.parse(thisElement.data('card')); 
    }); 
+0

Ehrfürchtig, danke. Ich musste die 'JSON.parse' loswerden, da dies zu einem Fehler führte. Jetzt alles gut. – TheRealPapa