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