Reputation: 633
I'm working on updating timestamps using Moment JS for a twitter feed clone.
When I add new tweets to the feed the timestamp of the older tweets also updates. I checked dev tools and the timestamp attribute isn't updated, so I'm not sure why it's refreshing.
var tweetMaker = function(tweet) {
var $tweet = $('<div></div>');
// Create HTML Nodes
var name = document.createElement('span');
var nameText = document.createTextNode('@' + tweet.user);
var timeStamp = document.createElement('time');
var timeStampText = document.createTextNode(moment(tweet.created_at).fromNow());
var linebreak = document.createElement('br');
var messageText = document.createTextNode(tweet.message);
// Add Classes
$tweet.addClass('tweet');
$(timeStamp).addClass('timeStamp');
$(timeStamp).attr('data-time', tweet.created_at);
$(name).addClass('name');
$(name).attr('tweetName', tweet.user);
// Build Nodes
name.appendChild(nameText);
timeStamp.appendChild(timeStampText);
$tweet.append(name, timeStamp, linebreak, messageText);
$('#tweetFeed').prepend($tweet)
}
//PROBLEM: All timestamps update with new batch of tweets
var timeUpdate = function(time) {
var timeStamp = $('.timeStamp');
var originalTime = timeStamp.attr('data-time');
console.log(originalTime)
timeStamp.html(moment(originalTime).fromNow());
}
$(document).ready(function() {
initialFeed();
setInterval(timeUpdate, 2000);
$('.name').on('click', filterByName);
$('#originalFeed').on('click', showFeed);
$('#newTweets').on('click', newTweets);
});
});
Upvotes: 1
Views: 45
Reputation: 1685
var timeStamp = $('.timeStamp');
will selecet ALL .timeStamp elements.
You should do something like this
var timeUpdate = function(time) {
var timeStamps = $('.timeStamp');
timeStamps.each(function (i) {
var timeStamp = $(this);
var originalTime = timeStamp.attr('data-time');
console.log(originalTime)
timeStamp.html(moment(originalTime).fromNow());
});
}
Upvotes: 1