Javascript 使用jquery实现更好的循环?
我正在用javascript做这件事,只是想知道是否可以用更多的jquery更优雅地解决它Javascript 使用jquery实现更好的循环?,javascript,jquery,coding-style,iteration,Javascript,Jquery,Coding Style,Iteration,我正在用javascript做这件事,只是想知道是否可以用更多的jquery更优雅地解决它 var tbl=""; for(var i=1; i<13; i++) { // creating 12 div's, one for each month tbl += "<div class='month' id='m"+i+"'>" + months[i-1]; // creating 31 divs for each da
var tbl="";
for(var i=1; i<13; i++) {
// creating 12 div's, one for each month
tbl += "<div class='month' id='m"+i+"'>" + months[i-1];
// creating 31 divs for each day in month
for(var j=1; j<32; j++) {
tbl += "<div class='monthday' id='m"+i+"d"+j+"'>"+
"<div class='date_header'>"+j+"</div>" +
"<div class='date_info'></div>" +
"</div>";
}
// close month-div
tbl += "</div>";
// insert a clear for each 4th month to get a nice style-break
if(i==4 || i==8 || i==12) {
tbl += "<br style='clear: both'>";
}
}
// finished
$("#friendsinfo").html(tbl);
var tbl=”“;
对于(var i=1;i制作日历时必须记住的事项:
每个月有不同的天数
闰年中二月有29天
计算闰年比大多数人意识到的要复杂得多。可以被4整除的年份是闰年。然而,可以被100整除的年份不是闰年,除非它们也可以被400整除
如果您想编写自己的代码,使用jQuery实际上并不能减少必须使用的循环数。但是,我建议您放弃这一部分:
// insert a clear for each 4th month to get a nice style-break
if(i==4 || i==8 || i==12) {
tbl += "<br style='clear: both'>";
}
//每4个月插入一个clear,以获得良好的风格休息
如果(i==4 | | i==8 | | i==12){
tbl+=“
”;
}
使用好的CSS使行正确地清晰,或者使用一个表(在这种情况下可能更合适)
在任何情况下,您可能实际上都想看看jQuery datepicker UI组件。我已经使用了很多,而且它工作得很好。显然,这取决于您是否真的需要datepicker,或者只是尝试显示一个完整的日程表或其他内容
或者,如果你只需要显示一个完整的日历,可以四处看看现有的脚本。这种事情已经被其他人做了一千次了,所以重新发明轮子没有什么意义
e、 g.试试这里:
最后一个想法是,使用PHP或您正在使用的任何语言输出日历,并使用CSS隐藏div可能会更有效。然后让javascript显示/隐藏日历,而不是每次都构建日历。模数运算符。而不是:
if(i==4 || i==8 || i==12) {
你可以做:
if (i%4){
另外,字符串连接速度很慢。我认为将HTML字符串添加到数组并连接()会更快。可能是错误的:)查找。它们允许你做你正在做的事情,而不用像那样在循环中手动连接字符串。这是一个如何工作的示例:
var template = '<a href="${link}" id="{$id}">${anchor}</a>';
$.template('myTemplate', template);
var data = [];
for (var x = 0; x < something.length; x++) {
var newLink = {
link: something[x].url,
id: 'mylink-' + something[x].id,
anchor: something[x].title
};
data.push(newLink);
}
$.tmpl('myTemplate', data).appendTo('#myContainer');
var模板=”;
$.template('myTemplate',template);
var数据=[];
for(var x=0;x
我已经在一些项目中使用了它们,它们在构建复杂的HTML块方面创造了奇迹。使用字符串连接创建HTML标记并不像idea=)那样是一个好的jquery。)
我更喜欢为这个日历制作HTML模板,并用数据填充它。您可以为此使用jQuery模板插件
如果以后需要更改标记,那么更改大量字符串将比更改一个html模板更加困难 并非所有月份都有31天;)我知道:)我故意让示例代码保持简单如果(I%4==0)
,你不必说?我相信说if(I%4)
等同于说if(I%4==1)
。呃,你确定吗<代码>!(i%4)
相当于javascript中的(i%4!=1)
,它与原始(i==4 | | i==8 | | i==12)的工作不同。是的,我确定。温特穆特和那些投票支持他的人实际上是错的(i%4)
就像说“如果我除以4,就有余数。”而我们想说的是!(i%4)
,意思是“如果我除以4就没有余数了。”你说如果(i%4==0)
不应该是是正确的,但是你说(i%4)
是错误的,如果(i%4==1)
等于,因为如果我的值是6,例如,(6%4)
等于2。因此,考虑到这一点,您应该使用将整个操作作为布尔值进行计算!(i%4)
。这样,如果余数为1、2或3,则计算为“真”,如果余数为0,则计算为“假”。现在条件是“如果不为真,则允许”,这与“如果为假,则允许”相同,因此如果余数为0,我们得到“假”,条件通过。令人困惑真是太棒了!可能的打字错误:在第一行,你写了{$id}
,但我相信你的意思是${id}
。