我对.length()属性有点问题。我正在尝试用同一个类来计算每个div中的跨距数。这些Div先前已附加在脚本中。有趣的是,如果我警告变量对应的长度,一切正常,如果我删除警报,它不会。从来没有见过,所以任何帮助将不胜感激:)这是代码:
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 :(得分: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 );