【问题标题】:jquery hide objects if object class doesn't contain a value如果对象类不包含值,则 jquery 隐藏对象
【发布时间】:2023-04-01 23:54:01
【问题描述】:

标题可能有点混乱,基本上我正在尝试编写一个脚本,该脚本将从下拉表单中获取选定的值,如果其类不包含下拉表单中的值,则隐藏 li。 . 如果这有道理?每个 li 有多个类..

这是我到目前为止所得到的(对不起,如果它很粗糙):

表格:

<form action="" name="filter" id="filter" method="post">
        <select name="bedrooms">
          <option value="">- Select Bedrooms -</option>
          <option value="bed-1">1</option>
          <option value="bed-2">2</option>
          <option value="bed-3">3</option>
          <option value="bed-4">4</option>
          <option value="bed-5">5</option>
        </select>
        <select name="bathrooms">
          <option value="">- Select Bathrooms -</option>
          <option value="bath-1">1</option>
          <option value="bath-2">2</option>
          <option value="bath-3">3</option>
          <option value="bath-4">4</option>
          <option value="bath-5">5</option>
        </select>
        <select name="frontage">
          <option value="">- Select Frontage Size -</option>
          <option value="frontage-100">100</option>
          <option value="frontage-200">200</option>
          <option value="frontage-300">300</option>
          <option value="frontage-400">400</option>
          <option value="frontage-500">500</option>
        </select>
        <input type="submit" name="filter-submit" id="filter-submit" value="Go" />
      </form>

JQuery:

$("#filter-submit").click(function() {

          var foo = [];
          $("#filter :selected").each(function(i, value){
            foo[i] = $(value).val();
          });
          if (foo) {
            $.each(foo, function(index, value){
              if (value) {
                //hide other objects based on "value"
                //$("#portfolio li").hasClass();
            };
            });
          };

        return false;
        });

好的,所以我卡住的地方是如何隐藏所有“#portfolio li”,这些“#portfolio li”没有输出为“值”的类。我以为我可以使用 hasClass 但不知道如何扭转它..如果这有意义吗?任何帮助将不胜感激:)

【问题讨论】:

    标签: jquery class hide selected


    【解决方案1】:

    您可以使用.not() 并通过课程,如下所示:

    $("#filter-submit").click(function() {
      var lis = $("#portfolio li");          //get all of the <li> elements
      $("#filter select").each(function() {  //loop through selected classes
        var val = $(this).val();             //get selected value, could be blank
        if(val) lis = lis.not('.' + val);    //get only <li>s without the class
      });
      lis.hide();                            //hide the ones without all classes
      return false;                          //prevent default behavior
    });
    

    【讨论】:

    • 谢谢尼克,我已经设法在我的脚本中使用 :not 选择器并让它工作,但由于某种原因我不能让你的脚本工作?它只是隐藏了一切,不知道为什么:S
    • $("#portfolio li").not("."+value).hide();是我使用的代码,我有散列出来的 cmets,它工作正常,我的代码非常混乱,哈哈
    • @SoulieBaby - 最初的选择器最后缺少select...虽然整体上更新为更紧凑的版本,但试一试,我目前无法测试,抱歉为此。
    【解决方案2】:

    只是想我会把这个扔出去玩。采用不同的方法来隐藏&lt;li&gt; 元素。在一个选择器中完成所有操作。

    $("#filter-submit").click(function() {
        var value = $('#filter select').map(function() {
            return ($(this).val() || null);
        }).get().join( '):not(.' );
    
        if(value) $('#portfolio li:not(.' + value + ')').hide();// Only filter if at
    });​                                                         // least one selected
    

    value 变量将保存类似这样的字符串:

    "bed-1):not(.bath-1):not(.frontage-100"
    

    【讨论】:

      【解决方案3】:
      $("#filter-submit").click(function()
      {
          var Portfolio = $("#portfolio");
          $('li',Portfolio).show();
      
          $("#filter selectb :selected").each(function(i){
              Class = $(this).attr('value');
              $('li',Portfolio).not('.' + Class).get().hide();
          });
          return false;
      });
      

      试一试!

      【讨论】:

      • 选择器select:selected 找不到任何东西...它需要一个空格,例如select :selected :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 2017-07-15
      • 2021-02-13
      • 1970-01-01
      相关资源
      最近更新 更多