【问题标题】:creating a json object on clicking a link单击链接创建 json 对象
【发布时间】:2020-10-18 22:54:55
【问题描述】:

我正在尝试使用元素内的文本创建一个 json 对象,以便我可以 sessionStorage 它们并在另一个中使用它们

                            <div class="single-product mb-60">
                                <div class="product-img">
                                    <img src="assets/img/categori/product1.png" alt="" class='apparel_img'>
                                    <div class="new-product">
                                        <span>New</span>
                                    </div>
                                </div>
                                <div class="product-caption">
                                    <div class="product-ratting">
                                        <i class="far fa-star"></i>
                                        <i class="far fa-star"></i>
                                        <i class="far fa-star"></i>
                                        <i class="far fa-star low-star"></i>
                                        <i class="far fa-star low-star"></i>
                                    </div>
                                    <h4><a href="#" class='apparel'>Green Dress with details</a></h4>
                                    <div class="price">
                                        <ul>
                                            <li class='price'>$40.00</li>
                                            <li class="discount">$60.00</li>
                                        </ul>
                                    </div>
                                </div>
                                <div>
                                    <a href="#" onclick="myfunc()">Add to cart</a>
                            </div>

这是html。我想做一个像这样的json文件

var my_product = {
"img" : img_src,
"product_name" : text_inside_first_a_link,
"cost" : first_list_item_under_ul
}

在我把它放入这个对象之后,我会将它们保存到不同的页面以使用它,并使用 html 和 appendChild 将它们添加到购物车中

sessionStorage.setItem("product_detail", my_product);

编辑:我已将类添加到需要从中提取信息的元素中

function myfunc(){
    var $items = $('.apparel, .price')
    var obj = {}
    $items.each(function() {
        obj[this.className] = $(this).text()
})

$('body').append('<br><pre>'+JSON.stringify(obj, null, ' '))}

我只尝试了两个类,但不起作用。它返回一个空对象

【问题讨论】:

  • 您这样做遇到了什么问题?
  • 实际问题是什么?
  • sessionStorage 和 localStorage 只存储字符串。设置时需要使用 JSON.stringify(),获取对象/数组时需要使用 JSON.parse()
  • 我的问题是创建对象。之后我可以把它们串起来。或者,如果您可以提供一些替代方案
  • 您误用了关键字this。

标签: javascript jquery json session-storage


【解决方案1】:

您可以在您的函数中传递this 并使用this 您可以使用closest() 来获取single-product div,然后只需使用find() 来获取所需的值。

演示代码:

function myfunc(el) {
//get closest div
  var selctor = $(el).closest('div.single-product');
  var obj = {}
  //get datas
     obj["img"] = selctor.find('img').attr('src'),
    obj["product_name"] = selctor.find(".product-caption a").text(),
    obj["cost"] = selctor.find(".price ul li:first").text()

  console.log(obj)
  //store in session
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="single-product mb-60">
  <div class="product-img">
    <img src="assets/img/categori/product1.png" alt="">
    <div class="new-product">
      <span>New</span>
    </div>
  </div>
  <div class="product-caption">
    <div class="product-ratting">
      <i class="far fa-star"></i>
      <i class="far fa-star"></i>
      <i class="far fa-star"></i>
      <i class="far fa-star low-star"></i>
      <i class="far fa-star low-star"></i>
    </div>
    <h4><a href="#">Green Dress with details</a></h4>
    <div class="price">
      <ul>
        <li>$40.00</li>
        <li class="discount">$60.00</li>
      </ul>
    </div>
  </div>
  <div>
    <!--pass this in function-->
    <a href="#" onclick="myfunc(this)">Add to cart</a>
  </div>

【讨论】:

  • 非常感谢。这就是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多