2014-09-20 66 views
1

我有一個聊天系統,我用jQuery + JSON + PHP顯示消息。我的問題是:我要選擇div「#chatMessages」,包含郵件內的每個格,並檢查它的類,看它是否存在,我的Ajax代碼:選擇另一個div中的每個div,並檢查它與jQuery的類

var data = {}; 
$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "../room/a.php", 
    async: true, 
    cache: false, 
    data: data, 
    success: function(response) { 
     if(response.error) { 
      alert(response.msg); 
     } else { 
      for(var i = 0; i < response.length; i ++) { 
       if($("#chatScreen > *").hasClass("message" + i) == false) 
       $("#chatScreen").append($("<div>",{ 
        class : 'message' + response[i][1], 
        html : response[i][0] + ' ' + response[i][4] 
       })); 
      } 
     } 
    }, 
    error: function (response) { 

     }, 
    complete: function() { 

     } 
    }); 

response[i][0]包含名稱, response[i][4]包含該消息。它工作正常,但我每3000ms加載一次這個函數,所以它重複每一條消息,我怎麼能檢查每div div搜索類'message' + response[i][1](包含MySQL的唯一ID)?

我試圖使用「.hasClass()」,但它不起作用。

+0

你對多個元素執行'hasClass',你確定這是你想要的嗎? – silkfire 2014-09-20 21:16:19

+0

我不知道是否有必要,我只是想檢查消息是否已經在屏幕上。它採用JSON格式,所以我認爲這是可能的。我會試着用if($(「。message」+ i).length){append}。 – 2014-09-20 21:19:45

回答

0

如果你想知道,如果有一個在給定的類的DIV任何元素,你可以這樣做:

if ($("#chatScreen").find(".message"+response[i][1]).length > 0) { 

你可以重構它,所以你不必通過每次搜索#chatScreen循環:

var chatScreen = $("#chatScreen"); 
for(var i = 0; i < response.length; i ++) { 
    if(chatScreen.find(".message"+response[i][1]).length > 0) { 
     chatScreen.append($("<div>",{ 
      class : 'message' + response[i][1], 
      html : response[i][0] + ' ' + response[i][4] 
     })); 
    } 
} 
+0

另外'if($(「#chatScreen .message」+ response [i] [1]).length> 0){'would do ... – LcSalazar 2014-09-20 21:22:07

+0

是的,它工作正常,謝謝! – 2014-09-20 21:23:44

+0

@LcSalazar我幾乎是這樣寫的,我決定使用明確的'find'來使它更清晰。 – Barmar 2014-09-20 21:24:29