创建jQuery元素后访问JSON数据

时间:2016-10-06 23:40:33

标签: javascript jquery json

我正在从API接收JSON数据并创建jQuery元素并将它们附加到列表中。

我怎样才能这样做,当我点击其中一个创建的HTML元素时,我可以将该元素的原始JSON数据记录到控制台?

cards.forEach(function (card) {
    var $newCard = $("<li>" + card.name + "</li>");
    $newCard.click(function () {
        // gives me the HTML, but I don't see the properties of the
        // object it was created from.
        console.log(this);
    });
    cardsContainer.append($newCard);
});

我猜我可以在字符串HTML中添加onclick函数吗?有没有办法从JavaScript中做到这一点?

3 个答案:

答案 0 :(得分:1)

我猜你看起来像这样:

var cardsContainer = $('#container'),
  cards = [{
    name: "One"
  }, {
    name: "Two"
  }, {
    name: "Three",
    test: "asd"
  }]
cards.forEach(function(card) {
  var $newCard = $("<li>" + card.name + "</li>").data('extra', card).on('click', function(e) {
    console.log($(this).data('extra'));
  });

  cardsContainer.append($newCard);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="container"></ul>

答案 1 :(得分:1)

只需访问卡片,因为它位于功能关闭内..

cards.forEach(function (card) {
  var $newCard = $("<li>" + card.name + "</li>");
  $newCard.click(function () {
      console.log(this); //will be the LI
      console.log(card); //this will be the card
  });
  cardsContainer.append($newCard);
});

答案 2 :(得分:0)

您可以使用jQuery&#39; .data()将整个对象存储在新的$newCard变量中。

例如:

var $newCard = $("<li>" + card.name + "</li>");
$newCard.data("myOriginalObject", card);
$newCard.click(function () {
    // Should now print the original object correctly
    console.log($(this).data("myOriginalObject"));
});