【问题标题】:wildcard in jQuery comparisonjQuery比较中的通配符
【发布时间】:2018-09-03 21:47:03
【问题描述】:

我知道this 的帖子,但.endsWith 似乎无法解决它,因为它必须包含.val 才能用于下拉菜单。我正在为不同的下拉菜单处理多种语言,其中“英语”一词出现在不同的翻译中。 indexof > 0 对于这么多语言并不实用。

如果是重复的,请指出在哪里查看,以便我继续。谢谢!

我对下拉值有以下 jQuery 比较:

$(".languages").change(function () {
    if ($(".languages").val() == "English (UK)"||$(".languages").val() == "English (US)") {
        $(".selected-1").show();
        $(".unselected-1").hide();
    }
    else $(".unselected-2").show() && $(".unselected-1").hide();
});

由于我为单词“English”处理多种不同的语言,因此我正在寻找这种情况下的通配符。那么为什么以下是不可能的,或者我该如何优化呢?

$(".languages").change(function () {
    if ($(".languages").val() == "* (UK)"||$(".languages").val() == "* (US)") {
        $(".selected-1").show();
        $(".unselected-1").hide();
    }
    else $(".unselected-2").show() && $(".unselected-1").hide();
});

【问题讨论】:

    标签: jquery logic comparison wildcard


    【解决方案1】:

    您可以使用正则表达式来查看它是否以“English”开头并以(US)(UK) 结尾:

    const val = $(".language").val();
    if (/^English \(U[SK]\)$/.test(val)) console.log('Pass');
    else console.log('Fail');
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input class="language" value="English (UK)">

    如果你只是想测试一个字符串是否以(US)(UK) 结尾,只需省略正则表达式的第一部分:

    const validate = str => /\(U[SK]\)$/.test(str);
    console.log(validate('something (US)'));
    console.log(validate('something (UK)'));
    console.log(validate('something (UN)'));

    将其集成到您的新代码中:

    const $selected1 = $(".selected-1");
    const $unselected1 = $(".unselected-1");
    $(".languages").change(function() {
      if (/\(U[SK]\)$/.test($(this).val())) {
        $(".selected-1").show();
        $(".unselected-1").hide();
      } else {
        $(".unselected-2").show()
        $(".unselected-1").hide();
      }
    });
    

    你也可以像你最初考虑的那样使用endsWith,虽然它有点不简洁:

    const $selected1 = $(".selected-1");
    const $unselected1 = $(".unselected-1");
    $(".languages").change(function() {
      const val = $(this).val();
      if (val.endsWith('(UK)') || val.endsWith('(US)')) {
        $(".selected-1").show();
        $(".unselected-1").hide();
      } else {
        $(".unselected-2").show()
        $(".unselected-1").hide();
      }
    });
    

    【讨论】:

    • 谢谢,但是,在这种情况下,我仍然会处理,例如,在西班牙语页面上完全相同的下拉菜单包含“Inglés (UK)”。这里没有“英语”这个词。或者我应该使用if (\(U[SK]\)$/.test(val))
    • 就像答案的第二部分所说,如果您只想测试字符串是否以(US)(UK) 结尾,请使用/\(U[SK]\)$/。您确实需要在 RE 的开头和结尾使用正斜杠,这些是它的分隔符 - 否则语法将无效。
    • 我想我必须给出整个代码,因为我不知道如何实现它。很抱歉一开始没有这样做,请参阅更新的问题。
    • 我不明白问题是什么,你不能只测试检索到的值吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多