【问题标题】:Problems with .clone & traverse within (selector).each().clone & traverse inside (selector).each() 的问题
【发布时间】:2020-07-07 09:01:51
【问题描述】:

我为一些瑜伽课输出了一些标记。我想从标记的一部分移动/复制教师照片(在页面加载时隐藏)并将其放在他们的名字旁边,这在页面加载时可见。

通过 3 节课(和 3 名教师),我可以将所有 3 名教师的照片放置到我想要的第一门课程的位置。不幸的是,我希望每个讲师的照片仅放置在他们自己课程中的所需位置。

您可以在此处查看当前正在发生的事情 - https://naada.staging.wpengine.com

我在每个课程中都成功复制了讲师照片,但我将它们全部放在一个位置,而不是它们各自的课程。我对(selector).each$(this).closest() 有什么不理解的地方?谢谢!

var instructor = $('div.live-stream-sched healcode-widget .bw-session__details .bw-session__instructor');
instructor.each(function() {
  var photo = $('.bw-session__photo').clone();
  $(this).closest('.bw-session__details').prev().find('.bw-session__group2').prepend(photo);
  return false;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="live-stream-sched">
  <!-- First Class -->
  <div class="bw-session">
    <div class="bw-session__basics">
      <div class="bw-session__info">
        <div class="bw-session__time">10:00 AM – 11:30 AM</div>
        <div class="bw-session__group1">LIVEstream Naada Level 2</div>
        <!-- Want to move clone photo here -->
        <div class="bw-session__group2">Kreg Weiss</div>
        <span class="bw-widget__cart_button">Sign Up</span>
      </div>
      <div class="bw-session__details">
        <div class="bw-session__expanded">
          <div class="bw-session__full-title">LIVEstream Naada Level 2 Description</div>
          <div class="bw-session__description">[..]</div>
          <div class="bw-session__instructor" style="">
            <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
            <div class="bw-session__instructor-name">Kreg Weiss</div>
            <div class="bw-session__bio">[..]</div>
          </div>
        </div>
      </div>
    </div>

    <!-- Second Class -->
    <div class="bw-session">
      <div class="bw-session__basics">
        <div class="bw-session__info">
          <div class="bw-session__time">12:30 PM – 2:00 PM</div>
          <div class="bw-session__group1">LIVEstream Naada Level 1</div>
          <!-- Want to move clone photo here -->
          <div class="bw-session__group2">Kreg Weiss</div>
          <span class="bw-widget__cart_button">Sign Up</span>
        </div>
        <div class="bw-session__details">
          <div class="bw-session__expanded">
            <div class="bw-session__full-title">LIVEstream Naada Level 1 Description</div>
            <div class="bw-session__description">[..]</div>
            <div class="bw-session__instructor" style="">
              <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
              <div class="bw-session__instructor-name">Kreg Weiss</div>
              <div class="bw-session__bio">[..]</div>
            </div>
          </div>
        </div>
      </div>

      <!-- Third Class -->
      <div class="bw-session">
        <div class="bw-session__basics">
          <div class="bw-session__info">
            <div class="bw-session__time">3:30 PM – 5:00 PM</div>
            <div class="bw-session__group1">LIVEstream Yoga for Healthy Aging</div>
            <!-- Want to move clone photo here -->
            <div class="bw-session__group2">Susan Bronson</div>
            <span class="bw-widget__cart_button">Sign Up</span>
          </div>
          <div class="bw-session__details">
            <div class="bw-session__expanded">
              <div class="bw-session__full-title">LIVEstream Naada Level 2 Description</div>
              <div class="bw-session__description">[..]</div>
              <div class="bw-session__instructor" style="">
                <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
                <div class="bw-session__instructor-name">Susan Bronson</div>
                <div class="bw-session__bio">[..]</div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: jquery clone each


    【解决方案1】:

    问题是因为您选择了所有 .bw-session__photo 元素。您只需在循环中选择与当前.bw-session__instructor 相关的一项。为此,请使用$(this).find(),如下所示:

    var $instructor = $('div.live-stream-sched .bw-session__details .bw-session__instructor');
    
    $instructor.each(function() {
      var $photo = $(this).find('.bw-session__photo').clone();
      $(this).closest('.bw-session__details').prev().find('.bw-session__group2').prepend($photo);
    });
    .bw-session__photo {
      display: block;
      width: 25px;
      height: 25px;
      background-color: #C00;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="live-stream-sched">
      <!-- First Class -->
      <div class="bw-session">
        <div class="bw-session__basics">
          <div class="bw-session__info">
            <div class="bw-session__time">10:00 AM – 11:30 AM</div>
            <div class="bw-session__group1">LIVEstream Naada Level 2</div>
            <!-- Want to move clone photo here -->
            <div class="bw-session__group2">Kreg Weiss</div>
            <span class="bw-widget__cart_button">Sign Up</span>
          </div>
          <div class="bw-session__details">
            <div class="bw-session__expanded">
              <div class="bw-session__full-title">LIVEstream Naada Level 2 Description</div>
              <div class="bw-session__description">[..]</div>
              <div class="bw-session__instructor" style="">
                <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
                <div class="bw-session__instructor-name">Kreg Weiss</div>
                <div class="bw-session__bio">[..]</div>
              </div>
            </div>
          </div>
        </div>
    
        <!-- Second Class -->
        <div class="bw-session">
          <div class="bw-session__basics">
            <div class="bw-session__info">
              <div class="bw-session__time">12:30 PM – 2:00 PM</div>
              <div class="bw-session__group1">LIVEstream Naada Level 1</div>
              <!-- Want to move clone photo here -->
              <div class="bw-session__group2">Kreg Weiss</div>
              <span class="bw-widget__cart_button">Sign Up</span>
            </div>
            <div class="bw-session__details">
              <div class="bw-session__expanded">
                <div class="bw-session__full-title">LIVEstream Naada Level 1 Description</div>
                <div class="bw-session__description">[..]</div>
                <div class="bw-session__instructor" style="">
                  <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
                  <div class="bw-session__instructor-name">Kreg Weiss</div>
                  <div class="bw-session__bio">[..]</div>
                </div>
              </div>
            </div>
          </div>
    
          <!-- Third Class -->
          <div class="bw-session">
            <div class="bw-session__basics">
              <div class="bw-session__info">
                <div class="bw-session__time">3:30 PM – 5:00 PM</div>
                <div class="bw-session__group1">LIVEstream Yoga for Healthy Aging</div>
                <!-- Want to move clone photo here -->
                <div class="bw-session__group2">Susan Bronson</div>
                <span class="bw-widget__cart_button">Sign Up</span>
              </div>
              <div class="bw-session__details">
                <div class="bw-session__expanded">
                  <div class="bw-session__full-title">LIVEstream Naada Level 2 Description</div>
                  <div class="bw-session__description">[..]</div>
                  <div class="bw-session__instructor" style="">
                    <div class="bw-session__photo" style="background-image: url('instructor1.jpg'); "></div>
                    <div class="bw-session__instructor-name">Susan Bronson</div>
                    <div class="bw-session__bio">[..]</div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 嗯!我相信如果我在我的instructor.each(function{..}) 中,那么我就不必指定一个bw-sessions__photo,因为我已经在那个讲师的 .each() 循环中了。但是$(This).find() 是必需的...我在想一个 for_each() PHP 循环。
    猜你喜欢
    • 2011-09-30
    • 2017-08-07
    • 2022-12-19
    • 2023-01-17
    • 1970-01-01
    • 2013-09-27
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多