有一个棘手的问题,想知道是否有人提出建议。

因此,我编写了一个脚本,该脚本查找在其父级上具有选定类的所有标签,它将对其进行克隆并将其附加到活动列表中,以便创建“过滤的项目”列表。

我想要做的是找到标签所属的每个部分的标题,并将其附加到每个标签上,因此,如果从“尺寸”部分中选择了该标签,我希望活动标签显示为“ Size:S”,然后如果它来自“颜色”部分,则显示为“颜色:蓝色”。目前,我仅设法获得它,因此它吐出了所有标题,但无法将其范围缩小到正确的过滤器部分。



var filterItem = '.m-refinement-item',
  filterItemClick = filterItem + ' .js-button-apply';

function swipeyFilterBtns() {
  $(".content-stuff").before("<section class='swipeySizeFilter'></section>");

  var index = 1;
  var text_val = $('.m-refinement-item').find('.js-refinement-name').text();

  console.log(text_val);

  $(filterItem)
    .find('.selected label')
    .clone()
    .wrapInner('<span class="swipeyLabelText">' + text_val + ': </span>')
    .appendTo($('.swipeySizeFilter'));

  $('.swipeySizeFilter label').each(function() {
    $(this)
      .addClass('swipeyFilterLabel')
      .attr('data-position', index);
    index++;
  });
}

function swipeyFilterClicky() {
  $(".swipeyFilterLabel").click(
    function() {
      setTimeout(function() {
        $(".js-overlay.js-mobile-overlay.m-refine-by-button").click();
        $(filterItemClick).click();
        $(".js-apply-refinements").click();
      }, 400);
    });
}

function swipeyFilterActiveItems() {
  $('.input-checkbox').on('change', function() {
    $(this).add('label[for="' + this.id + '"]').toggleClass('NickTester').toggleClass('swipeyFilterBtnActive', this.checked);
  }).trigger('change');
}

function swipeyFilterSetup() {
  var swipeyFilterCheck = $('.swipeyWrapper');

  if (swipeyFilterCheck.length === 0) {
    $('.swipeyFilterLabel').wrapAll('<div class="swipeyWrapper"><div class="swipeyContainer"></div></div>');
    $('<span class="swipeyFilterActiveList"></span>').prependTo('.swipeyContainer');
    $('<div class="swipeyFilterOverlay"></div>').prependTo('.swipeySizeFilter');
  }

  $(function() {
    var swipeyScrollChecker = $('.swipeyWrapper');

    swipeyScrollChecker.scroll(function() {
      if (swipeyScrollChecker.scrollLeft() >
        (swipeyScrollChecker.width() -
          swipeyScrollChecker.width())) {
        $('.swipeyFilterOverlay').fadeOut(300);
      }
    });
  });

  if ($(".swipeyWrapper").prop('scrollWidth') === $(".swipeyWrapper").width()) {
    $('.swipeyFilterOverlay').hide();
  }
}

function swipeyFilterActiveItemsList() {
  $('.swipeyFilterLabel.swipeyFilterBtnActive').each(function() {
    $(this).prependTo($('.swipeyFilterActiveList'));
  });
  $(".swipeyFilterLabel.swipeyFilterBtnActive").sort(sort_li).appendTo('.swipeyFilterActiveList');

  function sort_li(a, b) {
    return ($(b).data('position')) < ($(a).data('position')) ? 1 : -1;
  }

  if ($('.swipeyFilterActiveList').length) {
    $('<div class="swipeyFilterTitle">TESTER REFINED STYLES <span class="swipeyFilterCounter"></span>:</div>').prependTo('.swipeySizeFilter');
  }

  function swipeyFilterActiveCount() {
    var swipeyActiveCountNumber = $('.swipeyFilterActiveList .swipeyFilterBtnActive').length;
    $(".swipeyFilterCounter").html('(' + swipeyActiveCountNumber + ')');
  }
  setTimeout(swipeyFilterActiveCount, 100);
}

$(document).ready(function() {
  if ($('.selected').length >= 1) {
    swipeyFilterBtns();
    swipeyFilterClicky();
    swipeyFilterActiveItems();
    swipeyFilterSetup();
    swipeyFilterActiveItemsList();
  }
});

@media only screen and (min-width: 767px) {
  /* #Apple Device Scroll Fix
  –––––––––––––––––––––––––––––––––––––––––––– */
  * {
    -webkit-overflow-scrolling: touch;
  }
  .swipeySizeFilter {
    background: #f0f0f0;
    border-bottom: 1px solid #e0e0e0;
    border-top: 1px solid #e0e0e0;
    padding-top: 12px;
    position: relative;
  }
  .swipeyWrapper {
    cursor: pointer;
    overflow-x: scroll;
    overflow-y: hidden;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
  }
  .swipeyContainer {
    font-size: 0;
    padding-left: 8px;
  }
  .swipeyFilterTitle {
    font-weight: 700;
    line-height: 1;
    margin-bottom: 5px;
    margin-left: 20px;
  }
  .swipeyFilterLabel {
    background: #fff;
    border: 1px solid #000;
    cursor: pointer;
    display: inline-block;
    font-size: 14px;
    line-height: 1;
    margin-bottom: 14px;
    margin-left: 12px;
    max-height: 38px;
    min-width: 38px;
    padding: 12px 8px;
    text-align: center;
    vertical-align: top;
  }
  .swipeyFilterBtnActive {
    background: #000;
    color: #fff;
  }
  .m-label-inline .swipeyFilterBtnActive {
    background: #fff;
    color: #000;
  }
  .swipeyFilterBtnActive .swipeyLabelText:after {
    background: url('https://sb.monetate.net/img/1/422/2401995.png') no-repeat center;
    background-size: 10px;
    content: '';
    display: inline-block;
    height: 10px;
    margin-left: 12px;
    margin-right: 4px;
    position: relative;
    width: 10px;
  }
  .swipeyContainer>.swipeyFilterLabel:last-child {
    margin-right: 20px;
  }
  .swipeyFilterActiveList {
    display: inline-block;
    position: relative;
  }
  .swipeyFilterActiveList:after {
    background: #000;
    content: '';
    height: 38px;
    position: absolute;
    right: 0;
    width: 1px;
  }
  .swipeyWrapper::-webkit-scrollbar,
  .swipeyFilterActiveList:empty {
    display: none;
  }
  .swipeyFilterActiveList>.swipeyFilterLabel:last-child {
    margin-right: 14px;
  }
  .swipeyFilterOverlay {
    background: linear-gradient(to right, rgba(240, 240, 240, 0) 0%, rgba(240, 240, 240, 0.5) 10%, rgba(240, 240, 240, 0.85) 45%, rgba(240, 240, 240, 0.9) 85%);
    height: calc(100% - 2px);
    position: absolute;
    right: 0;
    top: 1px;
    width: 20px;
    z-index: 2;
  }
}


/* #Default Style Overrides
  –––––––––––––––––––––––––––––––––––––––––––– */

.pagination {
  margin-bottom: 0 !important;
}

.search-result-content {
  margin-top: 20px;
}


/* #iOS Devices
  –––––––––––––––––––––––––––––––––––––––––––– */

@supports (-webkit-overflow-scrolling: touch) {
  body {
    cursor: pointer;
  }
}


/* #Android Devices
  –––––––––––––––––––––––––––––––––––––––––––– */

@supports not (-webkit-overflow-scrolling: touch) {
  .swipeyLabelText {
    position: relative;
    top: -1px;
  }
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="content-stuff"></div>
<div class="js-refinement-mobile-table m-refinement-wrapper m-overlay">
  <div class="m-refinement-header">
    Refine by
  </div>
  <div class="js-mobile-overlay-refinements m-refinement-inner m-overlay">
    <ul class="m-refinement-list">
      <li class="js-mobile-overlay-refinement m-refinement-item">
        <span class="js-mobile-overlay-refinement-title m-refinement-title">
					<span class="js-refinement-name">Size</span>
        </span>
        <ul class="hidden js-mobile-overlay-refinement-values m-refinement-category m-overlay">
          <div class="m-refinement-fixed-height">
            <li class="selected m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="XS" name="XS" checked="checked" data-value="XS" title="Refine by Size: XS">
              <label for="XS">XS</label>
            </li>
            <li class="selected m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="S" name="S" data-name="size" data-value="S" checked="checked" title="Refine by Size: S">
              <label for="S">S</label>
            </li>
          </div>
        </ul>
      </li>
      <li class="js-mobile-overlay-refinement m-refinement-item">
        <span class="js-mobile-overlay-refinement-title m-refinement-title">
					<span class="js-refinement-name">Colour</span>
        </span>
        <ul class="hidden js-mobile-overlay-refinement-values m-refinement-category m-overlay">
          <div class="m-refinement-fixed-height">
            <li class="selected swatch-beige m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="Beige" name="Beige" checked="checked" data-value="Beige" title="Currently Refined by Colour: Beige">
              <label for="Beige">Beige</label>
            </li>
            <li class=" m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="Black" name="Black" data-name="color" data-value="Black" title="Refine by Colour: Black">
              <label for="Black">Black</label>
            </li>
          </div>
        </ul>
      </li>
    </ul>
  </div>
</div>





抱歉,如果我没有以最好的方式对此进行解释,但在我的Codepen上可能更有意义:https://codepen.io/nickelse/pen/dyyEqzR

最佳答案

var filterItem = '.m-refinement-item',
  filterItemClick = filterItem + ' .js-button-apply';

function swipeyFilterBtns() {
  $(".content-stuff").before("<section class='swipeySizeFilter'></section>");

  var index = 1;
  var text_val = $('.m-refinement-item').find('.js-refinement-name').text();

  console.log(text_val);

  $(filterItem)
    .find('.selected label')
    .clone()
    .wrapInner('<span class="swipeyLabelText">' + text_val + ': </span>')
    .appendTo($('.swipeySizeFilter'));

  $('.swipeySizeFilter label').each(function() {
    $(this)
      .addClass('swipeyFilterLabel')
      .attr('data-position', index);
    index++;
  });
}

function swipeyFilterClicky() {
  $(".swipeyFilterLabel").click(
    function() {
      setTimeout(function() {
        $(".js-overlay.js-mobile-overlay.m-refine-by-button").click();
        $(filterItemClick).click();
        $(".js-apply-refinements").click();
      }, 400);
    });
}

function swipeyFilterActiveItems() {
  $('.input-checkbox').on('change', function() {
    $(this).add('label[for="' + this.id + '"]').toggleClass('NickTester').toggleClass('swipeyFilterBtnActive', this.checked);
  }).trigger('change');
}

function swipeyFilterSetup() {
  var swipeyFilterCheck = $('.swipeyWrapper');

  if (swipeyFilterCheck.length === 0) {
    $('.swipeyFilterLabel').wrapAll('<div class="swipeyWrapper"><div class="swipeyContainer"></div></div>');
    $('<span class="swipeyFilterActiveList"></span>').prependTo('.swipeyContainer');
    $('<div class="swipeyFilterOverlay"></div>').prependTo('.swipeySizeFilter');
  }

  $(function() {
    var swipeyScrollChecker = $('.swipeyWrapper');

    swipeyScrollChecker.scroll(function() {
      if (swipeyScrollChecker.scrollLeft() >
        (swipeyScrollChecker.width() -
          swipeyScrollChecker.width())) {
        $('.swipeyFilterOverlay').fadeOut(300);
      }
    });
  });

  if ($(".swipeyWrapper").prop('scrollWidth') === $(".swipeyWrapper").width()) {
    $('.swipeyFilterOverlay').hide();
  }
}

function swipeyFilterActiveItemsList() {
  $('.swipeyFilterLabel.swipeyFilterBtnActive').each(function() {
    $(this).prependTo($('.swipeyFilterActiveList'));
  });
  $(".swipeyFilterLabel.swipeyFilterBtnActive").sort(sort_li).appendTo('.swipeyFilterActiveList');

  function sort_li(a, b) {
    return ($(b).data('position')) < ($(a).data('position')) ? 1 : -1;
  }

  if ($('.swipeyFilterActiveList').length) {
    $('<div class="swipeyFilterTitle">TESTER REFINED STYLES <span class="swipeyFilterCounter"></span>:</div>').prependTo('.swipeySizeFilter');
  }

  function swipeyFilterActiveCount() {
    var swipeyActiveCountNumber = $('.swipeyFilterActiveList .swipeyFilterBtnActive').length;
    $(".swipeyFilterCounter").html('(' + swipeyActiveCountNumber + ')');
  }
  setTimeout(swipeyFilterActiveCount, 100);
}

$(document).ready(function() {
  if ($('.selected').length >= 1) {
    swipeyFilterBtns();
    swipeyFilterClicky();
    swipeyFilterActiveItems();
    swipeyFilterSetup();
    swipeyFilterActiveItemsList();
  }
});

@media only screen and (min-width: 767px) {
  /* #Apple Device Scroll Fix
  –––––––––––––––––––––––––––––––––––––––––––– */
  * {
    -webkit-overflow-scrolling: touch;
  }
  .swipeySizeFilter {
    background: #f0f0f0;
    border-bottom: 1px solid #e0e0e0;
    border-top: 1px solid #e0e0e0;
    padding-top: 12px;
    position: relative;
  }
  .swipeyWrapper {
    cursor: pointer;
    overflow-x: scroll;
    overflow-y: hidden;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
  }
  .swipeyContainer {
    font-size: 0;
    padding-left: 8px;
  }
  .swipeyFilterTitle {
    font-weight: 700;
    line-height: 1;
    margin-bottom: 5px;
    margin-left: 20px;
  }
  .swipeyFilterLabel {
    background: #fff;
    border: 1px solid #000;
    cursor: pointer;
    display: inline-block;
    font-size: 14px;
    line-height: 1;
    margin-bottom: 14px;
    margin-left: 12px;
    max-height: 38px;
    min-width: 38px;
    padding: 12px 8px;
    text-align: center;
    vertical-align: top;
  }
  .swipeyFilterBtnActive {
    background: #000;
    color: #fff;
  }
  .m-label-inline .swipeyFilterBtnActive {
    background: #fff;
    color: #000;
  }
  .swipeyFilterBtnActive .swipeyLabelText:after {
    background: url('https://sb.monetate.net/img/1/422/2401995.png') no-repeat center;
    background-size: 10px;
    content: '';
    display: inline-block;
    height: 10px;
    margin-left: 12px;
    margin-right: 4px;
    position: relative;
    width: 10px;
  }
  .swipeyContainer>.swipeyFilterLabel:last-child {
    margin-right: 20px;
  }
  .swipeyFilterActiveList {
    display: inline-block;
    position: relative;
  }
  .swipeyFilterActiveList:after {
    background: #000;
    content: '';
    height: 38px;
    position: absolute;
    right: 0;
    width: 1px;
  }
  .swipeyWrapper::-webkit-scrollbar,
  .swipeyFilterActiveList:empty {
    display: none;
  }
  .swipeyFilterActiveList>.swipeyFilterLabel:last-child {
    margin-right: 14px;
  }
  .swipeyFilterOverlay {
    background: linear-gradient(to right, rgba(240, 240, 240, 0) 0%, rgba(240, 240, 240, 0.5) 10%, rgba(240, 240, 240, 0.85) 45%, rgba(240, 240, 240, 0.9) 85%);
    height: calc(100% - 2px);
    position: absolute;
    right: 0;
    top: 1px;
    width: 20px;
    z-index: 2;
  }
}


/* #Default Style Overrides
  –––––––––––––––––––––––––––––––––––––––––––– */

.pagination {
  margin-bottom: 0 !important;
}

.search-result-content {
  margin-top: 20px;
}


/* #iOS Devices
  –––––––––––––––––––––––––––––––––––––––––––– */

@supports (-webkit-overflow-scrolling: touch) {
  body {
    cursor: pointer;
  }
}


/* #Android Devices
  –––––––––––––––––––––––––––––––––––––––––––– */

@supports not (-webkit-overflow-scrolling: touch) {
  .swipeyLabelText {
    position: relative;
    top: -1px;
  }
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="content-stuff"></div>
<div class="js-refinement-mobile-table m-refinement-wrapper m-overlay">
  <div class="m-refinement-header">
    Refine by
  </div>
  <div class="js-mobile-overlay-refinements m-refinement-inner m-overlay">
    <ul class="m-refinement-list">
      <li class="js-mobile-overlay-refinement m-refinement-item">
        <span class="js-mobile-overlay-refinement-title m-refinement-title">
					<span class="js-refinement-name">Size</span>
        </span>
        <ul class="hidden js-mobile-overlay-refinement-values m-refinement-category m-overlay">
          <div class="m-refinement-fixed-height">
            <li class="selected m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="XS" name="XS" checked="checked" data-value="XS" title="Refine by Size: XS">
              <label for="XS">XS</label>
            </li>
            <li class="selected m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="S" name="S" data-name="size" data-value="S" checked="checked" title="Refine by Size: S">
              <label for="S">S</label>
            </li>
          </div>
        </ul>
      </li>
      <li class="js-mobile-overlay-refinement m-refinement-item">
        <span class="js-mobile-overlay-refinement-title m-refinement-title">
					<span class="js-refinement-name">Colour</span>
        </span>
        <ul class="hidden js-mobile-overlay-refinement-values m-refinement-category m-overlay">
          <div class="m-refinement-fixed-height">
            <li class="selected swatch-beige m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="Beige" name="Beige" checked="checked" data-value="Beige" title="Currently Refined by Colour: Beige">
              <label for="Beige">Beige</label>
            </li>
            <li class=" m-label-inline">
              <input class="js-refinement-link input-checkbox" type="checkbox" id="Black" name="Black" data-name="color" data-value="Black" title="Refine by Colour: Black">
              <label for="Black">Black</label>
            </li>
          </div>
        </ul>
      </li>
    </ul>
  </div>
</div>

09-25 18:17
查看更多