if ($(".event_list")[0]){
if($(".event_list").find(".type").length == 0 && $(".event_list").find(".sold").length == 0) {
$(".event_list").click();
}
} else {
$('#something').click(function() {
location.reload();
});
}
我像这样尝试了我的代码,但 HTML 元素被称为:
<span class="type sold">Verkocht</span>
我不确定为什么它不起作用
这是整个 .event-list:
<div class="event_list" data-url="/tickets/205511/2b39e0c726/masters-of-hardcore-20-years-of-rebellion" itemprop="tickets" itemscope="" itemtype="http://data-vocabulary.org/Offer">
<div class="description">
<span class="row-label">
2 e-tickets ·
<span class="type sold">Verkocht</span>
</span>
<span class="value">
<a href="/tickets/205511/2b39e0c726/masters-of-hardcore-20-years-of-rebellion" itemprop="offerurl">
Masters of Hardcore - 20 Years of Rebellion
– Regular Ticket
</a>
</span>
</div>
似乎你想要的是你的 if 语句来过滤你的 $(".event_list") 元素选择。相反,您的代码执行的操作是单击所有".event_list"元素,或者根据以下内容不单击任何内容:
- 如果至少存在一个event_list与任何孩子,
- 并且至少存在一个具有".type"子级的event_list(无论是相同的列表还是不同的列表)
- 如果其中至少有一个或另一个event_list有一个".sold"孩子,
然后单击全部,否则,单击"无"并执行以下操作:
$('#something').click(function() {
location.reload();
所以我认为你要求这样的东西:
var soldtypes = $(".event_list").has(".type").has(".sold").click();
例如:
<div class = "event_list">
<span class="type sold">both</span>
</div>
<div class = "event_list">
<span class="sold type">both</span>
</div>
<div class = "event_list">
<span class="type">one</span>
</div>
<div class = "event_list">
<span class="sold">one</span>
</div>
<div class = "event_list">
<span class="somethingelse">none</span>
</div>
<script type='text/javascript'>
var soldtypes = $(".event_list").has(".type").has(".sold");
soldtypes.css("background-color","red");
</script>
这将仅选择前两个event_lists并以红色突出显示它们,因为只有它们包含两个类的跨度。
编辑:
要选择反转,您可以使用
.not(":has('.type')");
获取与 jQuery .filter() 结果相反/相反的结果
例如,对于以前的 html,此脚本将突出显示除前两个event_lists之外的所有内容。
<script type='text/javascript'>
var non_types = $(".event_list").not(":has('.type')");
var non_solds = $(".event_list").not(":has('.sold')");
non_soldtypes = non_types.add(non_solds);
non_soldtypes.css("background-color","red");
</script>