2012-01-15 59 views
0

我有一個PHP通知系統,並且通知的數量使用jQuery放入DIV中。唯一的問題是,當有0個通知時,空的DIV仍然顯示。這是我目前使用jQuery:只有在空的情況下才刪除DIV

$(document).ready(function() { 
    $.get('/codes/php/nf.php', function(a) { 
     $('#nfbadge').html(a); 
     $('#nfbadge:empty').remove(); 
    }) 
}); 
setInterval(function() { 
    $.get('http://localhost/codes/php/nf.php', function(a) { 
     $('#nfbadge').html(a); 
     $('#nfbadge:empty').remove(); 
    }) 
}, 8000); 

唯一的問題是,如果在文檔加載有0通知,並增加了一個通知,徽章不會表現出來,所以基本上如果元素被刪除它將不會回來,除非頁面重新加載,但我做了通知系統,以便頁面不必重新加載。我怎樣才能解決這個問題?

回答

0

如果你有對PHP的控制,你不應該使用jQuery去除DIV,這是浪費資源和加載時間,即使它只是少數代碼行。

在你的PHP模板,你應該包括在條件語句中的#nfbadge格,是這樣的:

if($notifications) { 
    echo '<div id="nfbadge">'; 
    //notification stuff 
    echo '</div>'; 
} 
與jQuery代碼

那麼你可以做類似如下:

var $nfbadge = $('#nfbadge'); 
if($nfbadge) {$nfbadge.html(a)} 
+0

好主意,謝謝。 – user1150837 2012-01-16 03:54:55

1

卸下襬臂()取出DOM的元件以及該內容。這就是爲什麼它不會回來,除非你重新加載。使用.fadeOut()或.hide()代替

+0

我試圖使用.hide(),但由於某種原因它不起作用。 – user1150837 2012-01-15 22:36:05

+0

如果onload它是空的,你調用.hide(),它是隱藏的。一旦加載內容,一定要使用.show()。 – shaunsantacruz 2012-01-15 22:49:58

1

你應該可能做更像這樣的事情:

var elm = $('#nfbadge'), 
     T = setInterval(getCodes, 8000); 

function getCodes() { 
    $.get('/codes/php/nf.php', function(a) { 
     elm.html(a); 
     if (elm.is(':empty') && elm.is(':visible')) { 
      elm.hide(); 
     }else{ 
      elm.show(); 
     } 
    }); 
} 

您需要更多的工作,但應該讓您走上正軌!

相關問題