2012-02-14 1 views
0

http://jsfiddle.net/AVLzH/14/

Я пытаюсь построить мой первый JQuery расширенной функцию, которая будет принимать формат время YYYYMMDDHHMMSS и преобразовать его читаемые вещи, как Just a moment ago или 2 hours ago моего код работал отлично, прежде чем я сделал это в расширенную функцию.

Sidebar: yes I know its better to use Server-side code to get the current time, this is just for example purposes

Когда я называю ее функция в цепи, которая захватывает атрибут datetime от всех <time> элементов, и переключает текст, Что возвращается и устанавливает старый текст data-tooltip.

Там много кода, чтобы его, вероятно, лучше всего вам проверить jsfiddle страницу:

http://jsfiddle.net/AVLzH/14/

JSLint возвращает следующие ошибки:

Error: 
Expected an assignment or function call and instead saw an expression. 
}); 

Expected '(end)' and instead saw '}'. 
})(jQuery); 

Implied global: jQuery 3, console 19,20,22,23,40,50,75 

Да и в принципе я не имею ни малейшего понятия, что сделать это.

Спасибо за любую помощь раньше времени! не

http://jsfiddle.net/AVLzH/14/

PS - случайно поставил старый код там .. изменил ссылку

Спасибо за вашу помощь до сих пор .. JSLint больше не возвращает какую-либо ошибки, но это не правильно выполняется.

+2

Ваш код показывает глубокое непонимание того, как работает jQuery. Я рекомендую читать на jQuery Chaining: http://tobiasahlin.com/blog/quick-guide-chaining-in-jquery/ и перечитывать документы в редакторе плагинов http://docs.jquery.com/Plugins/Authoring – Shad

+0

ваш код без ошибок синтаксиса: http://jsfiddle.net/andromedado/DsTGu/ (хотя там есть и другие типы ошибок;) – Shad

ответ

2

Часть после возвращения неправильно

return returning; 
    }; 
}); 

})(jQuery); 

, следует читать:

return returning; 
    }; 
}(jQuery)); 

Попробуйте кнопку JSLint на Jsfiddle, чтобы проверить синтаксис.

(function($) { 

    jQuery.fn.fixTime = function(activityTime) { 



      var currentTime = new Date(), 
       month = currentTime.getMonth() + 1, 
       day = currentTime.getDate(), 
       year = currentTime.getFullYear(), 
       hour = currentTime.getHours(), 
       minute = currentTime.getMinutes(), 
       second = currentTime.getSeconds(), 
       activityTime = new Date(parseInt(this.attr('datetime'), 10)), 
       masterTime = (year*10000000000) + (month*100000000) + (day*1000000) + (hour*10000) + (minute*100) + (second * 1), 
       timeDifference = masterTime - activityTime, 
       returning; 

      console.log("Current Time: " + month + "/" + day + "/" + year + " " + hour + ":" + minute + ":" + second);  
      console.log("Current Time: " + year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + second); 

      console.log("Current Time: " + masterTime); 
      console.log("Activity Time: " + activityTime, this); 

     console.log(this.attr('datetime')) 
      console.log(new Date(20120211103802)) 
      // Change Time 
      timeDifference = timeDifference + 0; 

      // YYYYMMDDHHMMSS 

      //    60 - 1 Min 
      //   6000 - 1 Hour 
      //   240000 - 1 Day 
      //  7000000 - 1 Week 
      //  30000000 - 1 Month 
      // 10000000000 - 1 Year 

      // YYYYMMDDHHMMSS 

      console.log("Time Difference: " + timeDifference); 

      if (0 <= timeDifference && timeDifference < 60) { 
       returning = "Just a moment ago"; 
      } else if (60 <= timeDifference && timeDifference < 120) { 
       returning = "A minute ago"; 
      } else if (120 <= timeDifference && timeDifference < 6000) { 
       timeDifference = Math.floor(timeDifference/100); 
       returning = timeDifference + " minutes ago"; 
      } else if (6000 <= timeDifference && timeDifference < 20000) { 
       console.log("1 hour ago"); 
      } else if (20000 <= timeDifference && timeDifference < 240000) { 
       timeDifference = Math.floor(timeDifference/10000); 
       returning = timeDifference + " hours ago"; 
      } else if (240000 <= timeDifference && timeDifference < 2000000) { 
       returning = "Yesterday"; 
      } else if (2000000 <= timeDifference && timeDifference < 7000000) { 
       timeDifference = Math.floor(timeDifference/1000000); 
       returning = timeDifference + " days ago"; 
      } else if (7000000 <= timeDifference && timeDifference < 14000000) { 
       return "A week ago"; 
      } else if (14000000 <= timeDifference && timeDifference < 30000000) { 
       timeDifference = Math.floor(timeDifference/7000000); 
       returning = timeDifference + " weeks ago"; 
      } else if (30000000 <= timeDifference && timeDifference < 200000000) { 
       returning = "A month ago"; 
      } else if (200000000 <= timeDifference && timeDifference < 10000000000) { 
       timeDifference = Math.floor(timeDifference/100000000); 
       returning = timeDifference + " months ago"; 
      } else if (10000000000 <= timeDifference && timeDifference < 20000000000) { 
       returning = "A year ago"; 
      } else if (20000000000 <= timeDifference && timeDifference < 1000000000000) { 
       timeDifference = Math.floor(timeDifference/10000000000); 
       returning = timeDifference + " years ago"; 
      } else { 
       console.error("Error Calculating"); // Only when less than zero or longer than 100 years 
       returning = "undefined"; 
      } 

      return returning; 
     }; 

}(jQuery)); 

(function() { 

    var times = $('time'); 

    times.each(function() { 
     var beforeTime = $(this).text(); 
    //  var betterTime = new Date($(this).attr('datetime')); 

     var betterTime = $(this).fixTime(); 

     $(this).text(betterTime).attr('data-tooltip', beforeTime); 
    }); 

})(); 
+0

Спасибо! Теперь я получаю unsached TypeError: http://jsfiddle.net/AVLzH/13/ –

+0

Это потому, что вы вызываете метод против строки, а не для объекта jQuery. – ustun

+0

См. Изменение выше. – ustun

 Смежные вопросы

  • Нет связанных вопросов^_^