我发现了一些与选择不包含字符串的attr有关的类似问题,但在我的jQuery中,我想检查该元素是否有lang attr而不是以下字符串。
这是我的代码:
function lang(l) {
$('div[lang]').hide().filter(function() {
return $(this).attr('lang') === l;
}).show();
};
if (document.cookie.match("language=en")) {
lang("en");
}
else if (document.cookie.match("language=fr")) {
lang("fr");
}
$(".en").click(function () {
lang("en");
var d = new Date();
d.setTime(d.getTime() + (31536000000));
document.cookie = "language=en; expires=" + d.toUTCString();
})
$(".fr").click(function () {
lang("fr");
var d = new Date();
d.setTime(d.getTime() + (31536000000));
document.cookie = "language=fr; expires=" + d.toUTCString();
})
我基本上想要用某种语言显示所有元素,并隐藏所有其他元素(我目前的问题是如果lang attr不存在那么它只是隐藏所有内容......)
答案 0 :(得分:1)
您可以使用过滤器:
function lang(l) {
$('div[lang]').hide().filter(function() {
return $(this).attr('lang') === l;
}).show();
};
lang('en-gb');

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div lang="en-gb">gb</div>
<div lang="en-us">us</div>
&#13;
答案 1 :(得分:0)
您可以将.not()
与属性包含选择器一起使用。在此之前,您需要修改div选择器以使用带有lang的属性来考虑元素:
$('.div[lang]').not('[lang*="'+ l +'"]').hide();
您还可以将代码优化为:
function lang(l) {
var $langDivs = $('div[lang]')
$langDivs.not('[lang*="'+ l +'"]').hide();
$langDivs.filter('[lang*="'+ l +'"]').show();
}