2011-05-16 86 views
0

我在jQuery中試圖做的是將第一個註釋從一個組中隱藏起來,直到用戶單擊一個按鈕,然後輸出第一個註釋以便它可見。我有這個工作,一點。我希望它在頁面加載時發生,所以我將它放在document.ready中,但它不起作用。所以我把它附加到一個mousemove事件,它的工作原理。如果文本存在,用jQuery替換文本

但我現在想要做的是如果有評論,採取評論和顯示它像我以前一樣。但是,如果沒有評論,則顯示「無評論」字樣。以下是我正在使用的代碼。

if (jQuery('.dsq-commenter-name').length){ 
      jQuery(document).mousemove(function() { 
      jQuery('#comments p strong').text(jQuery('.dsq-commenter-name').text()); 
      jQuery('#comments p span.comment_excerpt').text(jQuery('.dsq-comment-text').text()); 
     }); 
     } 

此代碼無效。如果我帶走if語句,它可以很好地替換文本,但如果沒有任何註釋,它只會留出空白空間,而不會留下「無評論」字樣。如果我把代碼直接放入控制檯,它就可以工作。所以我不確定爲什麼在頁面加載時不起作用。我假設它必須是if語句的東西,但我已經嘗試了各種各樣的東西,並且無法使其工作。編輯: 沒有在這段代碼中顯示,但我有一切在jQuery(文檔).ready(函數(){ ,似乎並沒有幫助。但評論由Disqus處理,所以我我以爲他們後來加載,所以我怎麼會附加一個事件給他們?

第二次編輯: 好吧,我已經修復它,不知道它是否是最好的辦法,雖然。 @Jacob,我決定在代碼執行完之後加載註釋,所以我使用setTimeout添加了代碼,所以這個函數在頁面加載後會運行一秒左右,這是可行的。是否要這樣做,所以如果我錯了或者想看,請糾正我 代碼。

+0

存在於DOM中的意見在最初加載頁面?如果不是,那麼你將不會附加'mousemove'事件(這是'if'語句所控制的)。 – Jacob 2011-05-16 21:10:25

+0

嘗試把這整個事件放在jQuery onload執行中:''jQuery(function(){/ * All code goes here * /});' – 2011-05-16 21:15:15

+1

請記住,mousemove事件不是一次性事件,它被稱爲每一個瀏覽器檢測到鼠標移動的時間。所以有點擺動鼠標可能會輕鬆地運行你的代碼幾百倍。 – DarthJDG 2011-05-16 21:26:07

回答

0

我不確定「長度」是檢查的最佳變量。嘗試val:

if (jquery('.dsq-commenter-name').val() != "") { //or try != null 
    //do stuff. 
} 
+1

檢查'.length'沒有錯...... – 2011-05-16 21:13:27

+0

'.val()'只能在用戶輸入元素上工作,而且它是jQuery對象,它永遠不會爲空,只是空的。 – DarthJDG 2011-05-16 21:36:04

+0

是的,我試過了,它不起作用。 – Darin 2011-05-16 21:37:10

0

jQuery('.dsq-commenter-name')將返回定位所需元素的jQuery選擇器。 .length將始終爲真,除非該元素不存在,無論內容如何。如果你關心文本,你想在輸出上做一個.text()。如果查詢沒有找到元素,它將返回null。

大概

if (jQuery('.dsq-commenter-name').text()) { // checks for "", null, undefined 
+0

我檢查的課程只有在有評論時才存在。所以我可能只是檢查並看看是否有文本,但如果沒有評論,該類將不存在,所以我很確定它會返回正確的東西。 – Darin 2011-05-16 21:43:04