jQuery 比较中的通配符

wildcard in jQuery comparison

我知道 this post,但 .endsWith 似乎无法解决它,因为它必须包含 .val 才能用于下拉菜单.我正在为不同的下拉菜单处理多种语言,其中单词 "English" 出现在不同的翻译中。 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();
});

您可以使用正则表达式来查看它是否以 "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();
  }
});