2011-05-13 65 views
3

我對.length()屬性有點問題。我正在嘗試計算每個div中跨度相同的跨度數。這些Div在之前的腳本中被追加。有趣的是,如果我提醒與長度對應的變量,一切正常,如果我刪除警報,它不會。從來沒有看到過這樣的幫助,將不勝感激:)下面是代碼:帶附加元素的jQuery .length()

getTweets(); 
tweetCounter = function(){ 
    $('.entry').each(function(){ 
     var nTweets = $('.tweet', this).length; 
     var infoPane = $('.infoPane', this); 
     var tLink = '<a href="#" class="tLink" title="Tweets of the day">' + nTweets + ' Tweets that day</a>'; 
     infoPane.append(tLink); 
     //alert(nTweets); 
    }); 


} 
tweetCounter(); 

正如我所說的,它正確地追加,當我取消對警報。如果發表評論,每個DIV上都會顯示0 ... 有沒有想法?

這裏的getTweets功能:基於您的評論

getTweets = function(){ 
var url = "http://twitter.com/status/user_timeline/charleshaa.json?count=30&callback=?"; 
$.getJSON(url, function(data){ 
    $.each(data, function(i, item) { 
     var fullTDate = item.created_at; 
     var splitTDate = fullTDate.split(" "); 
     var tMonth = splitTDate[1]; 
     if (tMonth == "Jan"){ 
      tMonth = "01" 
     } else if(tMonth == "Feb"){ 
      tMonth = "02" 
     } else if(tMonth == "Mar"){ 
      tMonth = "03" 
     } else if(tMonth == "Apr"){ 
      tMonth = "04" 
     } else if(tMonth == "May"){ 
      tMonth = "05" 
     } else if(tMonth == "Jun"){ 
      tMonth = "06" 
     } else if(tMonth == "Jul"){ 
      tMonth = "07" 
     } else if(tMonth == "Aug"){ 
      tMonth = "08" 
     } else if(tMonth == "Sep"){ 
      tMonth = "09" 
     } else if(tMonth == "Oct"){ 
      tMonth = "10" 
     } else if(tMonth == "Nov"){ 
      tMonth = "11" 
     } else if(tMonth == "Dec"){ 
      tMonth = "12" 
     } 
     var tDay = splitTDate[2]; 
     var tYear = splitTDate[5]; 
     var tDate = tDay + '-' + tMonth + '-' + tYear; 
     var tText = '<span class="tweet">' + item.text + '</span>'; 
     //alert(tDate); 

     var destination = $('#date_'+ tDate +''); 
     destination.append(tText); 

    }); 
}); 

} 
+0

沒有的功能,如' .length()'在jQuery中。 'length'只是javascript數組的一個屬性。 –

+0

@TheSuperTramp:是的。一個jQuery對象就像一個類似數組的對象,因此擁有'.length'屬性。 – jAndy

+0

這正是我正在說的笏。你可以編寫'$('div')。length'但不是'$('div')。length()' –

回答

3

。它幾乎看起來像添加了.tweet元素的函數是否異步執行(可能是ajax請求?)如果是這種情況,該方法不會的代碼執行,並再次,這會帶來你的行爲。

你需要在這種情況下做的是,提供一個回調函數獲取和創建鳴叫的函數。如果完成,執行回調。

function get_tweets() { 
    var requests = [ ]; 

    for(var i = 0; i < 5; i++) { 
     requests.push($.getJSON('/foo' + i + '.json', function(data) { 
      // do something and create `.tweet` nodes 
     })); 
    } 

    return requests; 
} 

$.when.apply(null, get_tweets()).done(count_tweets); 

這是它在jQuery 1.5.2+中的樣子。此處的get_tweets()函數觸發5個請求並將Deferred對象存儲在返回的數組中。當所有承諾都滿足時,$.when()將會啓動。

更新

這裏是應該看起來像1.3.2:

getTweets = function(callback){ 
    var url = "http://twitter.com/status/user_timeline/charleshaa.json?count=30&callback=?"; 
    $.getJSON(url, function(data){ 
     $.each(data, function(i, item) { 
      var fullTDate = item.created_at; 
      var splitTDate = fullTDate.split(" "); 
      // and so forth.... 
     }); 

     if(typeof callback === 'function') 
      callback(); 
    }); 
} 

,然後調用它像

getTweets(tweetCounter); 
+0

這就是我的想法......代碼片段在'.ready()'中,函數在這之前添加了'.tweet'(_getTweets(); _)。看看我的編輯... – Charleshaa

+0

@Charleshaa:更新了我的答案。 – jAndy

+0

非常感謝您的回答,唯一的問題是我無法使用比1.3.2更新的任何jQuery ...您對於如何使用此版本可以做到這一點有任何想法嗎? – Charleshaa