代码之家  ›  专栏  ›  技术社区  ›  Developer

JQuery通过动态元素循环并获取数据值

  •  1
  • Developer  · 技术社区  · 4 年前

    $(".sport").on("click", function() {
      var thisId = $(this).attr("id");
      var thisChildren = $(this) + ".sportlist";
      $(thisChildren).each(function(index) {
        
      });
    });
    <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" />
    
    <div style="height:600px;padding:0px;margin:0px;">
    
      <div class="col-md-3 scroll-container" style="padding:0px;">
        <div class="panel-group" id="accordionMenu" role="tablist" aria-multiselectable="true">
          <div class="panel panel-default">
            <div class="panel-heading" role="tab">
              <h4 class="panel-title">
                <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse1" aria-expanded="true">
                  <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Cricket (2 items)
                </a>
              </h4>
            </div>
            <div class="panel-collapse collapse" id="collapse1" role="tabpanel" style="height: 0px;">
              <div class="sportlist" data-value="1">
                &nbsp;&nbsp; Sachin
              </div>
              <div class="sportlist" data-value="2">
                &nbsp;&nbsp; Kohli
              </div>
            </div>
            <div class="panel-heading" role="tab">
              <h4 class="panel-title">
                <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse2" aria-expanded="true">
                  <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Other (2 items)
                </a>
              </h4>
            </div>
            <div class="panel-collapse collapse" id="collapse2" role="tabpanel" style="height: 0px;">
              <div class="sportlist" data-value="3">
                &nbsp;&nbsp; Bob
              </div>
              <div class="sportlist" data-value="4">
                &nbsp;&nbsp; Willson
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    我需要的是当我点击蟋蟀我需要存储 data-value 一个阵列。我试了些什么,但做不到

    var this id=$(this).attr(“id”);
    $(thisChildren).each(函数(索引){
    
    });
    });
    1 回复  |  直到 4 年前
        1
  •  2
  •   Anurag Srivastava    4 年前

    使用 href a 随着 $.map :

    $(".sport").on("click", function() {
      let id = $(this).attr("href")
      , list = $.map($(id).find(".sportlist"), function(item){
        return $(item).data("value")      
      })
      console.log(list)
    });
    <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" />
    
    <div style="height:600px;padding:0px;margin:0px;">
    
      <div class="col-md-3 scroll-container" style="padding:0px;">
        <div class="panel-group" id="accordionMenu" role="tablist" aria-multiselectable="true">
          <div class="panel panel-default">
            <div class="panel-heading" role="tab">
              <h4 class="panel-title">
                <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse1" aria-expanded="true">
                  <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Cricket (2 items)
                </a>
              </h4>
            </div>
            <div class="panel-collapse collapse" id="collapse1" role="tabpanel" style="height: 0px;">
              <div class="sportlist" data-value="1">
                &nbsp;&nbsp; Sachin
              </div>
              <div class="sportlist" data-value="2">
                &nbsp;&nbsp; Kohli
              </div>
            </div>
            <div class="panel-heading" role="tab">
              <h4 class="panel-title">
                <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse2" aria-expanded="true">
                  <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Other (2 items)
                </a>
              </h4>
            </div>
            <div class="panel-collapse collapse" id="collapse2" role="tabpanel" style="height: 0px;">
              <div class="sportlist" data-value="3">
                &nbsp;&nbsp; Bob
              </div>
              <div class="sportlist" data-value="4">
                &nbsp;&nbsp; Willson
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
        2
  •  0
  •   angel.bonev    4 年前

    下面是另一种不使用id的方法

    $(".sport").click(function () {
       let ids = $.map($(this).closest(".panel-heading").next(".panel-collapse").find(".sportlist"), function (element) {
            return $(element).data("value")
        });
        console.log(ids)
    });
    <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" />
    <div style="height:600px;padding:0px;margin:0px;">
        <div class="col-md-3 scroll-container" style="padding:0px;">
            <div class="panel-group" id="accordionMenu" role="tablist" aria-multiselectable="true">
                <div class="panel panel-default">
                    <div class="panel-heading" role="tab">
                        <h4 class="panel-title">
                            <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse1" aria-expanded="true">
                                <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Cricket (2 items)
                            </a>
                        </h4>
                    </div>
                    <div class="panel-collapse collapse" id="collapse1" role="tabpanel" style="height: 0px;">
                        <div class="sportlist" data-value="1">
                            &nbsp;&nbsp; Sachin
                        </div>
                        <div class="sportlist" data-value="2">
                            &nbsp;&nbsp; Kohli
                        </div>
                    </div>
                    <div class="panel-heading" role="tab">
                        <h4 class="panel-title">
                            <a class="sport collapsed" role="button" data-toggle="collapse" data-parent="#accordionMenu" href="#collapse2" aria-expanded="true">
                                <small><i class="more-less glyphicon glyphicon-chevron-right"></i></small> &nbsp;Other (2 items)
                            </a>
                        </h4>
                    </div>
                    <div class="panel-collapse collapse" id="collapse2" role="tabpanel" style="height: 0px;">
                        <div class="sportlist" data-value="3">
                            &nbsp;&nbsp; Bob
                        </div>
                        <div class="sportlist" data-value="4">
                            &nbsp;&nbsp; Willson
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    jQuery closes -对于集合中的每个元素,通过测试元素本身并在DOM树中遍历其祖先来获取与选择器匹配的第一个元素。

    jQuery next -获取匹配元素集中每个元素的紧接着的同级。如果提供了选择器,则仅当它与该选择器匹配时,才检索下一个同级。

    jQuery find -获取当前匹配元素集中每个元素的子元素,这些子元素由选择器、jQuery对象或元素筛选。

    jQuery map -将当前匹配集中的每个元素通过