[英]How do I find an element with a specific class and CSS style using jQuery?
代碼如下所示:
<div class='class1'>
<div class='class2'>
<div class='class3'>
<div class='class4'>
<div class='class5'>
<p>Some text 1</p>
</div>
</div>
<div class='class4'>
<div class='class5'>
<p>Some text 1</p>
</div>
</div>
<div class='class4'>
<div class='class5' style="display:block;">
<p>Some text 1</p>
</div>
</div>
<div class='class4'>
<div class='class5'>
<p>Some text 1</p>
</div>
</div>
</div>
</div>
</div>
我想將class5
和CSS屬性display
設置為block
的div
。 一旦我有這個div
我想在執行進一步行動div
。 我嘗試使用類似
$('.class1 .class2 .class3 .class4').find( '.class5').is(':visible')
但這不起作用。
您遇到的問題是is()
返回一個布爾值,反映傳入的元素(或傳入的第一個元素)是否與提供的參數匹配。
如果切換到filter()
,它會根據提供的參數過濾傳入的集合; 如果元素匹配,則保留該元素,否則將其丟棄:
let classFiveElems = $('.class1 .class2 .class3 .class4 .class5').filter( ':visible'); console.log(classFiveElems);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class='class1'> <div class='class2'> <div class='class3'> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5' style="display:block;"> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> </div> </div> </div>
但是,您想要的不僅僅是對可見性的簡單檢查; 而是針對特定CSS屬性的測試; 所以我建議以下內容,它使用filter()
但使用匿名函數:
let classFiveElems = $('.class1 .class2 .class3 .class4 .class5').filter(function() { return this.style.display === 'block'; }).addClass('found'); console.log(classFiveElems);
.found { color: #f90; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class='class1'> <div class='class2'> <div class='class3'> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5' style="display:block;"> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5'> <p>Some text 1</p> </div> </div> </div> </div> </div>
參考文獻:
例如:
if($('.class1 .class2 .class3 .class4')
.find( '.class5:first')
.is(':visible')){
console.log('yes');
}
實際上,每個具有class5
類的div
都有一個display: block
屬性。
display: block
屬性是每個塊元素的默認狀態( divs
是塊元素)。
我已將其他div的display
屬性設置為none
,只是為了顯示以下代碼的功能。
$('div').each(function() { if ($(this).hasClass('class5') && $(this).is(":visible")) { console.log($(this).html()); } })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class='class1'> <div class='class2'> <div class='class3'> <div class='class4'> <div class='class5' style="display:none;"> <p>Some text 1</p> </div> </div> <div class='class4'> <div class='class5' style="display:none;"> <p>Some text 2</p> </div> </div> <div class='class4'> <div class='class5' value='t' style="display:block;"> <p>Some text 3</p> </div> </div> <div class='class4'> <div class='class5' style="display:none;"> <p>Some text 4</p> </div> </div> </div> </div> </div>
.is()
返回一個布爾值,可以在find()
使用pseudo-selector
來選擇元素:
$('.class1 .class2 .class3 .class4').find('.class5:visible')
$('.class5').each(function(){
if ($(this).is(":visible")) {
//What you want to do
}
});
你可以直接做
alert('is visible?', $( '.class5').is(':visible'));
這將返回具有display:block屬性的.class5。 在您的情況下,它將返回所有元素。 因為div中的所有div都包含默認的顯示屬性塊,所以它將根據您的情況返回所有它們。 如果嘗試,則可以確保只有要選擇的elements(.class5)具有顯示塊屬性。
var selector = $('.class1 .class2 .class3 .class4').find( '.class5').filter(function() {
return $(this).css('display') == 'block';
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.