2017-08-28 65 views
0

我正在寻找访问HTML元素的数据(JSON记录)并将其推入JavaScript中的数组。用JavaScript推入数组的JSON元素

的HTML是:

<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> 

我有我的网页上其中的一些。我在一个循环中读取每选择一些推到一个这样的数组:

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); 
    } 
}); 

但这正显示出我[]循环后:

console.log(cards); 

显示了数据OK:

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

如何读取字符串并将其作为对象推入数组?谢谢。

+0

'$(这).find( '输入[名称= “cards_to_exchange []”]')为( ':检查')。'可能是失败 – Isaac

+0

变体#1:''输入[类型=复选框]'',变体#2:''输入[name^=“cards_to_exchange”]''。 –

回答

3

您在<img>上使用.find(),它没有后代。

使用.next()来代替它的<input>兄弟姐妹。


此外,您还可以使用.filter()然后.map()把它清理干净一点。

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

尽管我不确定thisElement指的是什么。


你甚至可以缩短一点。

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

太棒了,谢谢。我必须摆脱'JSON.parse',因为这会导致错误。现在都很好。 – TheRealPapa