2010-10-07 35 views
5

Tôi biết điều này phải đơn giản nhưng không thể hiểu được. Đây là mã.Xóa hoặc ẩn một div nếu nó trống rỗng

<div class="cols lmenu_item1" id="leftMenuWrapper"> 
<div id="leftmenu"></div> 
</div> 

Tôi chỉ cần xóa "leftMenuWrapper" nếu "leftmenu" rỗng. Đây là những gì tôi đã sử dụng.

$('#leftmenu').empty().remove('#leftMenuWrapper'); 

Xin lỗi nếu đây là câu hỏi đơn giản. Có một thứ hai!

Cảm ơn!

+0

Nhìn vào câu hỏi này http://stackoverflow.com/questions/5327751/hide-divs-if-they-are-empty –

Trả lời

23

Bạn có thể làm điều đó như thế này:

$('#leftmenu:empty').parent().remove(); 

này chỉ chọn #leftmenunếu:empty, và sau đó chỉ lấy các .parent() của rằng để .remove(). Nếu nó không có sản phẩm nào, thì bộ chọn đầu tiên sẽ không tìm thấy bất kỳ thứ gì hoặc bất kỳ bậc cha mẹ nào để xóa.

+3

Ai nói kịch bản không thanh lịch? –

+1

+1 để hiển thị cho tôi bộ chọn ': trống '. –

+0

@Peter - Tôi nghĩ rằng bên cạnh ': hoạt hình' và': tiêu đề' nó là phần được tận dụng nhiều nhất của các bộ chọn giả thực sự tiện dụng, cho chúng một số tình yêu! –

1
if(!$('#leftmenu').html()){ $('#leftmenu').parent().remove(); } 
+1

Điều này có vẻ hoạt động, nhưng nó không hoàn toàn hiệu quả vì bạn phải chọn phần tử hai lần. Chắc chắn có vẻ như một giải pháp hợp lệ, mặc dù. – user113716

+0

@patrick - Tôi đoán bạn có thể làm 'var $ elie = $ ('# leftmenu'); if (! $ elie.html()) {$ elie.parent(). remove(); } ' –

+0

@Peter - Rất đúng. Sẽ tốt hơn nhiều để lưu vào bộ nhớ cache kết quả của bộ chọn. Trong thực tế, đối với một phần tử có ID được chọn nhiều hơn một lần ở bất cứ nơi nào, tôi có thể sẽ lưu trữ nó. – user113716

5

Nếu bạn muốn loại bỏ nếu nó trông trống:

if ($.trim($('#leftmenu').text()) == "") 
    $('#leftMenuWrapper').remove(); 

jsFiddle example

Trên đây chỉ mất nội dung văn bản của #leftmenu và cắt bỏ các khoảng trắng trước khi kiểm tra nếu mọi thứ ở đó.

Ưu điểm lớn của các bên trên qua $(#leftmenu:empty) là loại bỏ trên trong các trường hợp sau đây :empty sẽ không:

    // The above code works in these cases where ":empty" does not: 

<div id="leftmenu">  </div>        // <== white space 
<div id="leftmenu"><p></p></div>       // <== empty elements 

.trim()
.text()
.remove()


Lưu ý rằng sau đây là hiệu quả hơn (nhưng ít có thể đọc được IMO):

var $elie = ('#leftmenu'); 
if ($.trim($elie.text()) == "") 
    $elie.parent().remove(); 
+2

+1 - Tôi sẽ đặt cược rất nhiều người gặp khó khăn khi ': trống rỗng 'không hoạt động vì có khoảng trống hoặc ngắt dòng. – user113716

+0

Tôi có thiếu gì đó ở đây không?Nhìn vào trang jsFiddle của bạn và #leftMenuWrapper chứa văn bản "Bạn sẽ thấy điều này, nếu nó chưa bị xóa." đã bị loại bỏ. Nhưng từ những gì tôi có thể nói, kịch bản của bạn là nghĩa vụ phải chỉ loại bỏ cáC#leftMenuWrapper nếu không có văn bản bên trong ... ??? – Luke

Các vấn đề liên quan