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