jQuery属性选择器,检查attr存在但不包含字符串

时间:2018-05-18 09:46:08

标签: jquery

我发现了一些与选择不包含字符串的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不存在那么它只是隐藏所有内容......)

2 个答案:

答案 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;
&#13;
&#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();
}