我正在删除我为时间帧选择器函数编写的一些代码,该函数根据选定的时间范围(上个月,上一季度和去年)过滤搜索结果,隐藏所有不相关的结果什么时候创建它们。该函数由表单提交?time_frame_query=Last+Month
现在代码正常工作,这是一个开始。但是我觉得它可以大大改进,不幸的是我已经用尽了所有尝试自己做的选择。我遇到的问题是,当我编写去年过滤器的函数时,我不得不编写大量的代码,我觉得这并不是完全必要的。我已经玩弄了将所有月份变量放入数组然后将特定的“上个月”“上一季度”“去年”功能放在一起的想法,它将为我完成工作。但是,鉴于我目前对JS / jQuery的了解,我根本不知道如何去做这件事。
以下是我认为与我的问题相关的代码片段,也有助于说明我面临的问题。如果您需要再看,请告诉我。
编辑:感谢Doug,可以在此处找到整个工作代码:http://pastie.org/private/wl2qvnyar5xpibu4ot1lig
非常感谢任何帮助/建议。
var timezone = "Australia/ACT";
$.getJSON("http://json-time.appspot.com/time.json?tz="+timezone+"&callback=?",
function(data){
var datetime = data.datetime
var date = datetime.split(" ")
var day = date[1]
var month = date[2]
var year = date[3]
var prevYear = year - 1
var jan = 'Jan'
//etc etc etc
var dec = 'Dec'
var timeFrame = $.getUrlVar('time_frame_query');
switch(timeFrame){
//****************************
// Begin Last Quarter function
//****************************
case 'Last+Quarter':
switch(month){
case 'Jan':
$('#searchResults div.'+oct+prevYear+',#searchResults div.'+nov+prevYear+',#searchResults div.'+dec+prevYear+',#searchResults div.'+jan+year).show();
break;
case 'Feb':
$('#searchResults div.'+nov+prevYear+',#searchResults div.'+dec+prevYear+',#searchResults div.'+jan+year+',#searchResults div.'+feb+year).show();
break;
case 'Mar':
$('#searchResults div.'+dec+prevYear+',#searchResults div.'+jan+year+',#searchResults div.'+feb+year+',#searchResults div.'+mar+year).show();
break;
case 'Apr':
$('#searchResults div.'+jan+year+',#searchResults div.'+feb+year+',#searchResults div.'+mar+year+',#searchResults div.'+apr+year).show();
break;
// etc etc etc
}
break;
对于上面格式错误的代码的应用,首先提交到此站点。 WYSIWYG FTL! :(
答案 0 :(得分:1)
尝试datejs,解析日期字符串并返回实际日期的库。它非常灵活,可以理解上一个/下一个概念。它不知道什么季度,所以你可能需要调整它,如果我没有弄错的话,有一个API。
答案 1 :(得分:1)
好的,这是我最好的拍摄我有多累啊:)一般情况下。你需要以分号结束每一行,这非常重要。此外,我的代码假定为四位数年份(2009年对09年)。没有你的网站的其余部分,很难测试。如果您有任何疑问,请与我们联系:
$(document).ready(function(){
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
var timezone = "Australia/ACT";
$.getJSON("http://json-time.appspot.com/time.json?callback=?",
{ tz: timezone },
function(data) {
var datetime = data.datetime,
date = datetime.split(" "),
month = date[2],
year = date[3],
months = ['Jan', 'Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
curr_month = $.inArray(month, months), // Zero based return
curr = new Date(year, curr_month),
time_frame = $.getUrlVar('time_frame_query');
$('#searchResults p.report-date').each(function(){
var reportDate = $(this).text(),
dateExtract = reportDate.split(" "),
month = dateExtract[1],
year = dateExtract[2];
$(this).parent().addClass(month + year).hide();
});
var buildSelector = function(date) {
return "div." + months[date.getMonth()] + date.getFullYear();
}
var selectorRange = function(monthStart, monthRange, yearStart){
var range = [];
for(var i = monthRange; i <= 0; i++){
range.push( buildSelector(new Date(yearStart, monthStart + i)));
};
return range;
}
var searchResults = $('#searchResults')[0];
switch(time_frame){
case 'Last+Month':
$( selectorRange( curr_month, -1, year).join(), searchResults ).show();
break;
case 'Last+Quarter':
$( selectorRange( curr_month, -3, year).join(), searchResults ).show();
break;
case 'Last+Year':
$( selectorRange( curr_month, -12, year).join(), searchResults ).show();
break;
}
});
});