jQuery检查值是否为数组

时间:2019-07-16 10:53:19

标签: javascript jquery

我有一个元素列表,每个元素都有许多类型。我需要检查此类型是否具有特定文本,如果不能隐藏该类型。这应该隐藏有问题的类型,而不是其他类型。

结构为:

<div class="element1">
    <dd class="event_types">
        <a>Campaigns</a>
    | 
        <a>Clubs</a>
</div>
<div class="element2">
    <dd class="event_types">
        <a>Club</a>
    | 
        <a>Other</a>
    | 
        <a>Campaigns</a>
</div>

这是我尝试过的方法,但是如果其中一种类型不正确,则会隐藏所有类型

var allowed = ["Sport", "Clubs", "Campaigns"];    
$('.event_types a').each(function () {
    var typeText = $(this).text();
    if  (allowed.indexOf( typeText ) > 0)  {
        $(this).hide();
    }
});

2 个答案:

答案 0 :(得分:2)

.indexOf如果找不到元素,则返回-1,并且数组从0开始:

var allowed = ["Sport", "Clubs", "Campaigns"];    
$('.event_types a').each(function () {
    var typeText = $(this).text();
    console.log(allowed.indexOf(typeText), typeText);

    if  (allowed.indexOf(typeText) == -1)  {
        $(this).hide();
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="element1">
    <dd class="event_types">
        <a>Campaigns</a>
    | 
        <a>Clubs</a>
</div>
<div class="element2">
    <dd class="event_types">
        <a>Club</a>
    | 
        <a>Sport</a>
    | 
        <a>Campaigns</a>
</div>

答案 1 :(得分:0)

您要隐藏数组中没有的内容吗?

indexOf如果未找到,则返回-1,这就是您需要测试的内容。

过滤器是比每个过滤器更好的解决方案,我建议进行修剪以确保文本不被空白包围

await
ConfigureAwait(false)
var allowed = ["Sport", "Clubs", "Campaigns"];    
$('.event_types a').filter(function () {
    var typeText = $.trim($(this).text());
    return allowed.indexOf( typeText ) === -1
}).hide();