【问题标题】:If condition that pushes values that contain/match a string如果条件推送包含/匹配字符串的值
【发布时间】:2016-08-23 01:04:16
【问题描述】:

我有一个运行良好的完整日历脚本。我有一些过滤器,基本上有以下形式:

$("input[name='event_filter_select']:checked").each(function () {
    // I specified data-type attribute in HTML checkboxes to differentiate
    // between risks and tags.
    // Saving each type separately
    if ($(this).data('type') == 'risk') {
        risks.push($(this).val());
    } else if ($(this).data('type') == 'tag') {
        tagss.push($(this).val());
    }
});

然而,else if 语句应该检查检查的值 'tag' 是否包含在结果集中,而不是结果集中的唯一值(正如 == 所暗示的那样)。

现在我只能过滤只有选中标记值的结果。但我想过滤那些具有标签值的那些。

我认为这是通过 match(/'tag'/) 完成的,但我终生无法弄清楚如何将其放入 if 语句中。

如果有人能带领我朝着正确的方向前进,我会非常高兴。

【问题讨论】:

  • 您能否再描述一下您想要的输出 - 很难理解您在这里想要实现的目标
  • " 过滤那些具有标签值的那些" - 使用分隔的if 语句

标签: javascript jquery if-statement fullcalendar string-matching


【解决方案1】:

试试这个条件。

   /\btag\b/.test($(this).data('type'))

【讨论】:

    【解决方案2】:

    如果你的数据是一个字符串,例如:tag filter1 filter2 filter3,你可以使用indexOf-function (manual)

    代码:

    if ($(this).data('type').indexOf("risk") != -1))
       //Action here.
    

    如果没有找到文本,indexOf 返回-1

    【讨论】:

      【解决方案3】:

      我会这样做:

      ...
      if ($(this).data('type') == 'risk') {
          risks.push($(this).val());
      } else if ($(this).data('type').test(/^tag/) {
          tagss.push($(this).val());
      }
      ...
      

      如果“标签”必须位于字符串的开头,则此方法有效。
      如果“标签”可以在字符串中的任何位置出现,则可以使用test(/tag/)

      【讨论】:

        【解决方案4】:

        你可以使用:

        var re = new RegExp('\\b' + word + '\\b', 'i');
        

        或者如果您希望将单词硬编码(例如,在示例中,单词 test):

        var re = /\btest\b/i 
        

        显示以下匹配的示例:

        var input = document.querySelector('input');
        var div = document.querySelector('div');
        var re;
        var match;
        
        input.addEventListener('keyup', function() {
          match = input.value.trim();
          re = new RegExp('\\b' + match + '\\b', 'i');
          
          if($('div').data('type').match(re))
            div.innerHTML = 'Matched the word: ' + '<strong>' + match + '</strong>';
          else div.innerHTML = 'Did not match the word: ' + '<strong>' + match + '</strong>';
            
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        Word to match:<input></input><br>
        Output:
        <div data-type='tag tags test'></div>

        将上述正则表达式合并到您的代码中后,它应该如下所示:

        else if ($(this).data('type').match(/\btag\b/i) { //true for data-type that has `tag` in it.
            tagss.push($(this).val());
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-09-24
          • 1970-01-01
          • 1970-01-01
          • 2019-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-15
          相关资源
          最近更新 更多