是否可以缩小此选择器?
if ($("#element1").hasClass("highlight") && $("#element2").hasClass("highlight") && $("#element3").hasClass("highlight") && $("#element4").hasClass("highlight") && $("#element5").hasClass("highlight")) {
$("#newstyle).css("visibility", "visible");
};
我已经尝试了
if ($("#element1, #element2, #element3, #element4, #element5").hasClass("highlight"))
和
if ($("#element1 && #element2 && #element3 && #element4 && #element5").hasClass("highlight"))
......但这是不正确的。
基本上我有很多这样的条件:5个指定元素hasClass XYZ
。所以我很感激压缩它。
答案 0 :(得分:4)
你走在正确的轨道上。我应该注意到,我假设模式element1
,element2
,element3
并不是你的ID,你刚才在问题中使用了这个...
我可能会把它转过头来:使用一组#element:not(.highlight)
的选择器,如果结果是空的(length == 0
),它们都有它或者不存在
if (!$("#element1:not(.highlight), #element2:not(.highlight), #element3:not(.highlight), #element4:not(.highlight), #element5:not(.highlight)").length) {
$("#newstyle").css("visibility", "visible");
}
他们都有班级的例子:
if (!$("#element1:not(.highlight), #element2:not(.highlight), #element3:not(.highlight), #element4:not(.highlight), #element5:not(.highlight)").length) {
$("#newstyle").css("visibility", "visible");
}
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3" class="highlight"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
<div id="newstyle" style="visibility: hidden">I'm visible!</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
其中至少有一个没有:
他们都有班级的例子:
if (!$("#element1:not(.highlight), #element2:not(.highlight), #element3:not(.highlight), #element4:not(.highlight), #element5:not(.highlight)").length) {
$("#newstyle").css("visibility", "visible");
}
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
<div id="newstyle" style="visibility: hidden">I'm visible!</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果它们都是同一个类,就像你的例子一样,我们可以更简洁一点:
if (!$("#element1, #element2, #element3, #element4, #element5").not(".highlight").length) {
$("#newstyle").css("visibility", "visible");
}
他们都有班级的例子:
if (!$("#element1, #element2, #element3, #element4, #element5").not(".highlight").length) {
$("#newstyle").css("visibility", "visible");
}
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3" class="highlight"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
<div id="newstyle" style="visibility: hidden">I'm visible!</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
至少有一个没有:
if (!$("#element1, #element2, #element3, #element4, #element5").not(".highlight").length) {
$("#newstyle").css("visibility", "visible");
}
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
<div id="newstyle" style="visibility: hidden">I'm visible!</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:2)
您可以使用从"[id^=element]"
传递给选择器Array.prototype.every()
的属性开始,从$(el).is(".highlight")
回调
.every()
// Note `$("#element1, #element2, #element3, #element4, #element5")`
// can be substituted for `$("[id^=element]")` here
if ([].every.call($("[id^=element]"), el => $(el).is(".highlight"))) {
// do stuff
console.log("ok");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3" class="highlight"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
或者,您可以检查以.id
开头的"element"
以及.className
包含"highlight"
的后跟空格或值结尾.length
的元素是否相等以.length
.id
元素"element"
if ($("[id^=element][class~=highlight]").length === $("[id^=element]").length) {
console.log("ok")
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3" class="highlight"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
答案 2 :(得分:2)
您可以选择所有.highlight
个元素,根据ID进行过滤,如果您有五个,则ID为element1-5
的所有元素都会有highlight
个类,您可以设置样式
var els = $('.highlight').filter( (_,el)=>/^element[1-5]$/.test(el.id));
if ( els.length===5 ) $("#newstyle").css("visibility", "visible");
使用jQuery选择器
var els = $('[id^=element].highlight').filter('[id$=1],[id$=2],[id$=3],[id$=4],[id$=5]');
if (els.length === 5) $("#newstyle").css("visibility", "visible");
答案 3 :(得分:1)
选择所需的所有元素,并使用jQuery .map()
将所选元素替换为true/false
的类存在。然后使用javascript .indexOf()
检查数组结果中是否存在false
值。
var hasClassArr = $("[id^='element']").map(function(){
return $(this).hasClass("highlight");
}).get();
if (hasClassArr.indexOf(false) == -1)
console.log("All elements has class");
if ($("[id^='element']").map(function(){return $(this).hasClass("highlight");}).get().indexOf(false) == -1)
console.log("All elements has class");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element1" class="highlight"></div>
<div id="element2" class="highlight"></div>
<div id="element3" class="highlight"></div>
<div id="element4" class="highlight"></div>
<div id="element5" class="highlight"></div>
答案 4 :(得分:1)
if ($("#element1,#element2,#element3,#element4,#element5").filter(".highlight").length == 5){
$("#newstyle).css("visibility", "visible");
}