[英]How to check empty div in Javascript/jQuery?
我在下面有 HTML 代碼,我想在其中檢查 javascript 中的空 div。 如果div.featured-block
是空的,那么它應該在house-senate
級別上應用display: none
。
HTML代碼:
<html class="js grunticon objectfit object-fit flexbox" lang="en-US">
<div class="focustop house-senate widget widget-cpac-depth -horizontal">
<div class="featured-block">
</div>
</div>
</html>
這是我嘗試過但不起作用的方法。
jQuery代碼:
jQuery(function ($) {
if ($(this).find("html:lang(en-US) .house-senate .featured-block").is(":empty")) {
$(this).find(".house-senate").css("display", "none"); /* Display none */
}
})
問題陳述:
我想知道我應該在上面的 jQuery 代碼中進行哪些更改,以便在div.featured-block
為空時在house-senate
類上應用display:none
那個div
不是空的。 它實際上包含一個僅包含換行符的文本節點。
如果要檢查元素是否為空或僅包含空格,則應在修剪后檢查其內容。
jQuery(function ($) { if ($(this).find("html:lang(en-US) .house-senate .featured-block").text().trim() === '') { $(this).find(".house-senate").css("display", "none"); /* Display none */ } })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html class="js grunticon objectfit object-fit flexbox" lang="en-US"> <p>There should be a div with some text after this</p> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <p>This won't be visible</p> <div class="featured-block"> </div> </div> </html>
div 實際上不是空的,因為里面有空格。 我沒有像那樣檢查它是否為空,而是使用了children.length
。
這是僅適用於 Javascript 的有效解決方案:
if (document.getElementsByClassName("featured-block")[0].children.length === 0) { document.getElementsByClassName("house-senate")[0].style.display = "none"; /* Display none */ }
<html class="js grunticon objectfit object-fit flexbox" lang="en-US"> <span>Hello</span> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"> </div> </div> </html>
您的代碼有幾個問題。
通常,當有人執行$( this ).find()
, this
是像<div>
、 <button>
類的元素。 在您的代碼中, this
是指window
。 雖然這似乎有效,但這里是使用 jQuery 搜索整個頁面的典型方法, $( 'html:lang(en-US) .house-senate .featured-block' )
。
你的.featured-block
實際上不是空的。 它里面有文本節點,所以is( ':empty' )
會失敗。
alert( $( 'html:lang(en-US) .house-senate .featured-block' ).is( ':empty' ) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html class="js grunticon objectfit object-fit flexbox" lang="en-US"> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"> </div> </div> </html>
確保開始和結束 DIV 標簽之間沒有空格。
alert( $( 'html:lang(en-US) .house-senate .featured-block' ).is( ':empty' ) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html class="js grunticon objectfit object-fit flexbox" lang="en-US"> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"></div> </div> </html>
即使有了上面的修復,您的代碼仍然可能有問題。 如果頁面上有多個html:lang(en-US) .house-senate .featured-block
元素,並且其中至少有一個是空的,那么$( 'html:lang(en-US) .house-senate .featured-block' ).is( ":empty" )
將返回 true。 然后, $(this).find(".house-senate").css("display", "none");
將隱藏頁面上的每個.house-senate
。 也就是說,如果$(this)
問題已解決,像$( '.house-senated' ).css( 'display', 'none' );
.
alert( $( 'html:lang(en-US) .house-senate .featured-block' ).is( ":empty" ) ); if ( $( 'html:lang(en-US) .house-senate .featured-block' ).is( ":empty" ) ) { $( '.house-senate' ).css( 'display', 'none' ); }
.house-senate { padding: 2rem; border: 1px solid rebeccapurple; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html lang="en-US"> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"></div> </div> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block">Not Empty</div> </div> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"><!-- I'm still empty. --></div> </div> </html>
還有一個問題:
if ( $( 'html:lang(en-US) .house-senate .featured-block' ).is( ":empty" ) ) {
$( '.house-senate' ).css( 'display', 'none' );
}
這里的問題是支票和隱藏的內容之間沒有直接關聯。 您想要做的,而且我確定這就是您的意圖,是“僅當.house-senate
的子.featured-block
元素為空時才隱藏.house-senate
。”
您需要做的是獲取所有空的.featured-block
元素,然后對於找到的每個空元素,將 DOM 樹從該元素向上移動到.house-senate
並隱藏它。 這樣,空的和隱藏的之間就會發生緊密的耦合。
jQuery 總是對集合進行操作(想想數組)。 As a result, jQuery methods will "magically" work when a selector returns one or many elementsl without you needing to perform loops. 因此,您的代碼可以簡化為:
$( '.featured-block:empty' ).parent().hide();
.house-senate { padding: 2rem; border: 1px solid rebeccapurple; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html lang="en-US"> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"></div> </div> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block">Not Empty</div> </div> <div class="focustop house-senate widget widget-cpac-depth -horizontal"> <div class="featured-block"><!-- I'm still empty. --></div> </div> </html>
注意:我不確定您的選擇器是否需要html:lang(en-US)
和.house-senate
。 如果您確實需要為不同的語言做一些不同的事情,或者如果.featured-block
存在於.house-senate
元素之外,您可能需要重新添加它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.