【问题标题】:Sort items by price on clicking dropdown单击下拉菜单按价格对项目进行排序
【发布时间】:2020-05-06 18:11:46
【问题描述】:

我有一个下拉列表和属性列表。下拉菜单包含两个选项,从低到高和从高到低。如果任何用户单击任何一个下拉项目,列出的属性应按其价格排序。如何使用 javascript 实现这一点?

property.html

                <div class="col-sm-6">
                  <div class="pxp-sort-form form-inline float-right">
                      <div class="form-group">
                          <select class="type-regular custom-select" id="pxp-sort-results" name="price-sorting">
                              <option value="" selected="selected disabled">Default Sort</option>
                              <option class="price-sorting" value="l2h" id="l2h">Price (Lo-Hi)</option>
                              <option class="price-sorting" value="h2l">Price (Hi-Lo)</option>

                          </select>
                      </div>

                  </div>
              </div>

            <div class="row products-grid">
              {% for item in properties.all %}
              <div class="col-sm-12 col-md-6 col-xxxl-4 product">
                  <a href="{% pageurl item %}" class="pxp-results-card-1 rounded-lg" data-price="{{ item.price }}" data-prop="1">
                      <div id="property-{{item.id}}" class="carousel slide" data-ride="carousel" data-interval="false">
                          <div class="carousel-inner">
                              {% for j in item.prop_images.all %}
                                {% image j.prop_img original as property_img %}
                                <div class="carousel-item {% if forloop.first %} active {% endif %}" style="background-image: url('{{property_img.url}}')"></div>
                              {% endfor %}
                          </div>
                          <span class="carousel-control-prev" data-href="#{{item.prop_name}}" data-slide="prev">
                              <span class="fa fa-angle-left" aria-hidden="true"></span>
                          </span>
                          <span class="carousel-control-next" data-href="#property-{{item.id}}" data-slide="next">
                              <span class="fa fa-angle-right" aria-hidden="true"></span>
                          </span>
                      </div>
                      <div class="pxp-results-card-1-gradient"></div>
                      <div class="pxp-results-card-1-details" id="prop-dtls">
                          <div class="pxp-results-card-1-details-title">{{item.prop_name}}</div>
                          <div class="pxp-results-card-1-details-price price">{{item.price}}</div>
                      </div>
                      <div class="pxp-results-card-1-features">
                          <span>{{item.bedroom}} BD <span>|</span> {{item.bathroom}} BA <span>|</span> {{item.sqft}} SF</span>
                      </div>
                      <div class="pxp-results-card-1-save"><span class="fa fa-star-o"></span></div>
                  </a>
              </div>
              {% endfor %}

          </div>

这些值来自后端。

【问题讨论】:

    标签: javascript django wagtail


    【解决方案1】:

    您可以使用 Javascript(重新排序 DOM 元素)或从服务器获得的响应来执行此操作。

    JS:

    function reverseChildren(parent) {
        for (var i = 1; i < parent.childNodes.length; i++){
            parent.insertBefore(parent.childNodes[i], parent.firstChild);
        }
    }
    

    您可以设置在元素的父DIV上添加onclickJS事件处理程序来反转所有子元素。

    来源:https://stackoverflow.com/a/37860657/3345051

    您可以使用.order_by()过滤方法从服务器发回响应,并在请求中带有一个标志以确定它是否是反向的。

    例如:

    非反向 - Item.objects.all().order_by('price')

    反转 - Item.objects.all().order_by('-price')

    class ItemView(View):
        def get(self, request, *args, **kwargs):
            isReversed = '-price' if request.GET['reverse'] is True else 'price'
            items = Item.objects.all().order_by(isReversed)
            return JsonResponse(items)
    

    【讨论】:

      【解决方案2】:

      下面的代码完全按照我的意愿运行。

      $(document).on("change", ".price-sorting", function() {
      
      var sortingMethod = $(this).val();
      
      if(sortingMethod == 'l2h')
      {
          sortProductsPriceAscending();
      }
      else if(sortingMethod == 'h2l')
      {
          sortProductsPriceDescending();
      }
      
      });
      function sortProductsPriceAscending()
      {
          var products = $('.product');
          products.sort(function(a, b){
          return $(a).data("price") - $(b).data("price")});
          $(".products-grid").html(products);
      
      }
      
      function sortProductsPriceDescending()
      {
          var products = $('.product');
          products.sort(function(a, b){ return $(b).data("price") - $(a).data("price")});
          $(".products-grid").html(products);
      
      }
      

      HTML 代码

      <div class="col-sm-6">
                        <div class="pxp-sort-form form-inline float-right">
                            <div class="form-group">
                                <select class="type-regular custom-select price-sorting" id="pxp-sort-results">
                                    <option value="" selected="selected disabled">Default Sort</option>
                                    <option value="l2h" id="l2h">Price (Lo-Hi)</option>
                                    <option value="h2l">Price (Hi-Lo)</option>
      
                                </select>
                            </div>
                            <div class="form-group d-flex">
                                <a role="button" class="pxp-map-toggle"><span class="fa fa-map-o"></span></a>
                            </div>
                        </div>
                    </div>
      
      <div class="row products-grid">
                    {% for item in properties.all %}
                    <div class="col-sm-12 col-md-6 col-xxxl-4 product" data-price="{{ item.price }}">
                        <a href="{% pageurl item %}" class="pxp-results-card-1 rounded-lg"  data-prop="1">
                            <div id="property-{{item.id}}" class="carousel slide" data-ride="carousel" data-interval="false">
                                <div class="carousel-inner">
                                    {% for j in item.prop_images.all %}
                                      {% image j.prop_img original as property_img %}
                                      <div class="carousel-item {% if forloop.first %} active {% endif %}" style="background-image: url('{{property_img.url}}')"></div>
                                    {% endfor %}
                                </div>
                                <span class="carousel-control-prev" data-href="#{{item.prop_name}}" data-slide="prev">
                                    <span class="fa fa-angle-left" aria-hidden="true"></span>
                                </span>
                                <span class="carousel-control-next" data-href="#property-{{item.id}}" data-slide="next">
                                    <span class="fa fa-angle-right" aria-hidden="true"></span>
                                </span>
                            </div>
                            <div class="pxp-results-card-1-gradient"></div>
                            <div class="pxp-results-card-1-details" id="prop-dtls">
                                <div class="pxp-results-card-1-details-title">{{item.prop_name}}</div>
                                <div class="pxp-results-card-1-details-price price">&#8377 {{item.price}}</div>
                            </div>
                            <div class="pxp-results-card-1-features">
                                <span>{{item.bedroom}} BD <span>|</span> {{item.bathroom}} BA <span>|</span> {{item.sqft}} SF</span>
                            </div>
                            <div class="pxp-results-card-1-save"><span class="fa fa-star-o"></span></div>
                        </a>
                    </div>
                    {% endfor %}
      
                </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-02
        相关资源
        最近更新 更多