我有一个元素列表,每个元素都有许多类型。我需要检查此类型是否具有特定文本,如果不能隐藏该类型。这应该隐藏有问题的类型,而不是其他类型。
结构为:
<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();
}
});
答案 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();