jQuery比较中的通配符

时间:2018-09-03 21:47:03

标签: jquery logic comparison wildcard

我知道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();
});

由于我用“英语”一词处理多种不同的语言,因此在这种情况下,我要寻找通配符。那么为什么以下操作不可行,或者如何优化呢?

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

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式查看其以“英语”开头还是以(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();
  }
});