使用单选按钮筛选列表



我目前正在尝试根据厚度"3mm"和"5mm"在 2 个项目的列表之间进行排序。

当您单击 3mm 的单选按钮时,我希望自动过滤列表中具有 3mm 类的项目,对于 5mm 也是如此。然后,如果您单击"无首选项",我希望它根据厚度删除任何过滤器。

我已经弄乱了一段时间,试图拼凑代码,但无济于事,任何帮助将不胜感激!谢谢!

JSFiddle 还: http://jsfiddle.net/gdkmrqnr/

.HTML:

<div id="container">
  <div class="page">
    <div>
      <h1>piece-y search</h1>
    </div>
    <div id="main">

      <div class="c1">
        <h2>piece search</h2>
        <div id="piece-search">
            <ul class="sort-by">
            <li>
            <input class="search" placeholder="Search pieces" />
            </li>
            <li class="sort btn" data-sort="type">Sort by type</li>
            <li class="sort btn" data-sort="thickness">Sort by thickness</li>
            <li class="sort btn" data-sort="height">Sort by height</li>
            <li class="sort btn" data-sort="category">Sort by style</li>
          </ul>
          <ul class="filter">
             <li>
                <select name="material" id="filter-material">
                <option selected="selected" value="">Select a Material</option>
                <option value="plastic">Plastic</option>
                <option value="glass">Glass</option>
                </select>
            </li>
             <li>
           <input type="radio" name="thickness" value="none" checked>No Preference
           </li>
           <li>
           <input type="radio" name="thickness" value="3mm">3mm
           </li>
           <li>
           <input type="radio" name="thickness" value="5mm">5mm
           </li>
            <li class="btn" id="filter-none">Show all</li>
            <li class="btn" id="filter-scientific" value="category">Only show scientific glass</li>
            <li class="btn" id="filter-artsy" value="category">Only show artsy glass</li>
          </ul>
          <ul class="list">
            <li class="item">
                    <p class="sorting-info hide-this">
                    <p class="material">plastic</p>
                    <p class="type">pipe</p>
                    <p class="thickness">3mm</p>
                    <p class="height">15inch+</p>
                    <p class="category">artsy</p>
                     </p>
                </li>
                <li class="item">
                    <p class="sorting-info hide-this">
                    <p class="material">glass</p>
                    <p class="type">bowl</p>
                    <p class="thickness">3mm</p>
                    <p class="height">14inch-</p>
                    <p class="category">scientific</p>
                     </p>
                </li>
    </ul>
  </div>
</div>
</div>
</div> <!-- end of #container -->

.JS

// radio button to select thickness
$("input[type='radio']").change(function () {
    var number = $("[name='thickness']:checked").val();
    var letter = $("[name='thickness']:checked").val();
    if (!thickness || !thickness) return;
    $("li").hide();
    $("li").filter(function (index) {
        return $(this).hasClass(thickness) && $(this).hasClass(letter);
    }).show();
});

您可以按thickness的文本筛选列表项,如下所示:

$("input[type='radio']").change(function () {
    var number = $("[name='thickness']:checked").val();
    //var letter = $("[name='thickness']:checked").val();
    //if (!thickness || !thickness) return;
    var $items = $(".list .item");
    if (number === "none") {
        $items.show();
    } else {
        $items.hide();
        $items.filter(function (index) {
            return $(this).find('.thickness').text() === number;
        }).show();
    }
});

我试图尽可能多地保留您的代码结构。查看重构的代码。

好的,在查看了我的代码后,我似乎已经使用上面的 html 跳过了这个选项:

将此作为JS将在选择时对列表进行排序,它只是不会显示选中的框,如果有人知道如何解决这个问题,我将不胜感激!

.JS

// radio button to select thickness
$('#filter-3mm').click(function() {
  featureList.filter(function(item) {
    if (item.values().thickness == "3mm") {
      return true;
    } else {
      return false;
    }
  });
  return false;
});

最新更新