需求介绍
给一个年份和第几周,计算出这周是从几号到几号
规则
一年分为54周,第一周是1月1日到第一个周日,第二周是今年的第一个周一往后推一周,以此类推,第53周的时候如果没到12月31日,则该年度有54周,反之有53周,到12月31日不管是不是周末,都截止到最后一周的结束日期
代码详解
//时间戳转年月日 参数是秒的时间戳 函数返回一个对象 对象里有年 月 日
function yearDay(long){
var time = new Date(long * 1000)
var year = time.getFullYear();
var month = (time.getMonth()+1) < 10 ? '0' + (time.getMonth()+1) : (time.getMonth()+1);
var date = time.getDate() < 10 ? '0' + time.getDate() : time.getDate() ;
var yearday = {year,month,date}
return yearday
//计算一年中的每一周都是从几号到几号
//第一周为1月1日到 本年的 第一个周日
//第二周为 本年的 第一个周一 往后推到周日
//以此类推 再往后推52周。。。
//如果最后一周在12月31日之前,则本年有垮了54周,反之53周
//12月31 日不论是周几,都算为本周的最后一天
//参数年份 ,函数返回一个数组,数组里的对象包含 这一周的开始日期和结束日期
function whichWeek(year){
var d = new Date(year, 0, 1);
while (d.getDay() != 1) {
d.setDate(d.getDate() + 1);
let arr = []
let longnum = d.setDate(d.getDate())
if(longnum > +new Date(year, 0, 1)){
let obj = yearDay(+new Date(year, 0, 1) / 1000)
obj.last = yearDay( longnum / 1000 - 86400)
arr.push(obj)
let oneitem = yearDay(longnum / 1000)
oneitem.last = yearDay( longnum / 1000 + 86400 * 6)
arr.push(oneitem)
var lastStr
for(var i = 0 ; i<51 ;i++){
let long = d.setDate(d.getDate() + 7)
let obj = yearDay( long / 1000)
obj.last = yearDay( long / 1000 + 86400 * 6)
lastStr = long + 86400000 * 6
arr.push(obj)
if(lastStr < +new Date(year + 1, 0, 1)){
let obj = yearDay(lastStr / 1000 + 86400)
obj.last = yearDay(+new Date(year + 1, 0, 1) / 1000 - 86400)
arr.push(obj)
}else{
arr[arr.length-1].last = yearDay(+new Date(year + 1, 0, 1) / 1000 - 86400)
return arr
//例如 2012 年就跨了54周,也有很多是53周的
let week2012 = whichWeek(2012)
console.log(week2012)
//调用完得到的是一个数组见下图
然后需要哪一周的起始时间,直接用索引在数组里取就好了
javascript
****************************模板规范化管理 开始****************************
每个模版要把所用的css,js,img,html按照相关规定,放到指定目录。
每个模版都可定义不同的样式,所以系统内置的功能的相关文件也都放在了模版里,每个模版里存储一份,避免替换系统目录下的其他文件。
ads/ 存放广告js文件,可自定义名称, 在当前模版路径的config.xml 里配置好
html/ 存放html模版文件,可自定义名称,在后台配置好。
js/ 存放模版相关js文件
js/home.js 系统内置功能的JS函数库
css/ 存放样式表文件
css/home.css 系统内置功能的样式表,例如 顶踩,联想搜索,星星评分,历史记录,留言本,评论等功能。
css/style.css 当前模版的自定义样式表
images/ 存放模版的相关图片
images/home/ 存放系统内置功能的相关图片,例如 顶踩,联想搜索,星星评分,历史记录,留言本,评论等功能。
images/ads/ 存放广告图片
template/user/ 为系统会员中心的模版及相关css和js
****************************模板规范化管理 结束****************************
****************************系统内置JS、CSS说明 开始****************************
文件:js/home.js
MAC.Url 当前网页的链接
MAC.Title 当前网页的标题
MAC.Copy(s) 复制内容到剪切板; s=字符串
MAC.Home(o,u) 设置默认主页; <a target="_self" href="[removed]void(0)"
MAC.Fav(u,s) 加入浏览器收藏夹; <a target="_self" href="[removed]void(0)"
MAC.Open(u,w,h) 弹出网页;u=网址,w=宽度,h=高度
MAC.Cookie.Set(name,value,days) 设置cookie的值; name=cookie名称,value=cookie值,days=过期时间
MAC.Cookie.Get(name) 获取cookie的值; name=cookie名称
MAC.Cookie.Del(name) 删除cookie的值; name=cookie名称
MAC.AdsWrap(w,h,n) 预留广告位占位; w=宽度,h=高度,n=名称
自动加载设置项:
html元素ID为history: 自动设置为鼠标移动滑入滑出 显示隐藏 历史记录。
html元素ID为wd: 自动设置联想搜索功能。
延迟加载图片: img元素不要使用src调用图片地址,而是用data-original。 <img class="lazy" data-original="[vod:pic]" src="{maccms:path}images/blank.png" alt="[vod:name]" />
****************************系统内置JS、CSS函数库说明 结束****************************
****************************模板规范化管理 结束****************************
****************************模板介绍开始****************************
home_include.html 全站公共引入文件 引入js、css样式,还有系统JS变量
home_head.html 全站头部
home_foot.html 全站尾部
home_gbook.html 留言本
home_comment.html 评论
label_ 开头的都是自定义页面
art_detail.html 文章内容页
art_index.html 文章首页
art_list.html 文章分类筛选页
art_map.html 文章地图页
art_search.html 文章搜索页
art_topicindex.html 文章专题首页
art_topiclist.html 文章专题数据列表页
art_type.html 文章分类页
vod_detail.html 视频内容页
vod_index.html 视频首页
vod_list.html 视频分类筛选页
vod_map.html 视频地图页
vod_play.html 视频播放页
vod_playopen.html 视频弹窗播放页
vod_search.html 视频搜索页面
vod_topicindex.html 视频专题首页
vod_topiclist.html 视频专题数据列表页
vod_type.html 视频分类页面
****************************模板介绍结束****************************
****************************全局标签开始****************************
{maccms:runtime} 页面运行时间、查询次数、占用内存
{maccms:date} 当前日期
{maccms:siteaid} 当前所在模块ID
{maccms:url} 网站域名
{maccms:name} 网站名称
{maccms:keywords} 网站关键字
{maccms:description} 网站描述信息
{maccms:icp} 网站备案号
{maccms:qq} 网站管理QQ
{maccms:email} 网站管理Email
{maccms:visits} 网站统计代码
{maccms:path} 安装目录
{maccms:path_ads} 当前模版广告文件目录
{maccms:path_tpl} 当前模版HTML文件目录
{maccms:suffix} 文件后缀名
{maccms:link_gbook} 留言本链接
{maccms:link_search_vod} 视频搜索页链接
{maccms:link_search_art} 文章搜索页链接
{maccms:link_index} 视频首页链接
{maccms:link_index_art} 文章首页链接
{maccms:link_map_vod} 视频地图链接
{maccms:link_map_art} 文章地图链接
{maccms:link_topic_vod} 视频专题首页链接
{maccms:link_topic_art} 文章专题首页链接
{maccms:link_map_rss} RSS链接
{maccms:link_map_baidu} Baidu SiteMap链接
{maccms:link_map_google} Google SiteMap链接
{maccms:count_vod_all} 视频数据总量
{maccms:count_vod_day} 视频当天更新数据量
{maccms:count_art_all} 文章数据总量
{maccms:count_art_day} 文章当天更新数据量
{maccms:count_user_all} 会员总数
{maccms:count_user_day} 会员当天注册数量
{maccms:userid} 当前登录会员ID
{maccms:username} 当前登录会员名
{maccms:usergroupid} 当前登录会员组ID,如果没有登录则是空
{maccms:curvodtypeid} 视频当前分类ID
{maccms:curvodtypepid} 视频当前分类的父分类ID
{maccms:curvodtopicid} 视频当前专题ID
{maccms:curarttypeid} 文章当前分类ID
{maccms:curarttypepid} 文章当前分类的父分类ID
{maccms:curarttopicid} 文章当前专题ID
{maccms:load label.html} 载入自定义页面内容
{maccms:getlink label.html} 获取自定义页面的链接
{maccms:siteaid} 当前所在系统模版id
视频首页 10
视频地图页 11
视频分类,筛选页 12
视频专题首页 13
视频专题数据列表 14
视频搜索页 15
视频内容页 16
视频播放页 17
视频下载页 18
文章首页 20
文章地图页 21
文章分类,筛选页 22
文章专题首页 23
文章专题数据列表 24
文章搜索页 25
文章内容页 26
系统留言本 30
系统评论 31
系统用户中心 40
****************************条件判断if标签 开始****************************
if标签,支持多重嵌套,每个层级的if标签不能相同
{if-A:[vod:num] > 1 }....{endif-A}
{if-A:[vod:num] mod 2=0}....{else-A}....{endif-A}
{if-A:[vod:num] mod 2=0}....{elseif-A}....{else-A}....{endif-A}
{if-A:not isN("[vod:remarks]")}
[vod:remarks]
{elseif-A:[vod:state]=0}
{elseif-A:[vod:state]>0}
{if-B:[vod:state]>10000}
[连载[vod:state]]期
{else-B}
[连载[vod:state]]集
{endif-B}
{else-A}
{endif-A}
****************************条件判断if标签 结束****************************
****************************用户登陆页面标签 开始****************************
用户登录窗口iframe调用:
<iframe src="{maccms:path}index.php?m=user-iframe.html" frameborder="0" scrolling="no" width="100%" height="25"></iframe>
特有标签:
{maccms:userid} 会员ID
{maccms:username} 会员名
{maccms:userqq} QQ号码
{maccms:useremail} email地址
{maccms:userphone} 电话
{maccms:userregtime} 注册时间
{maccms:userpoints} 剩余点数
{maccms:userlogintime} 最后登录时间
{maccms:userloginnum} 总登录次数
{maccms:usertj} 推荐人数
{maccms:usergroupid} 会员组ID
{maccms:usergroupname} 会员组名称
{maccms:userloginip} 最后登录IP
<DIV class=p-nav>
<LI>{maccms:username},欢迎您回来! </LI>
<LI>推荐人数:{maccms:usertj} </LI>
<LI>账户积分:{maccms:userpoints} </LI>
<LI>登录次数:{maccms:userloginnum} </LI>
<LI>登录时间:{maccms:userlogintime} </LI>
<LI><A href="{maccms:path}index.php?m=user-index.html" target="_blank">进入用户中心</A></LI>
<LI><A href="{maccms:path}index.php?m=user-logout.html">退出</A> </LI>
****************************用户登陆页面标签 结束****************************
****************************友情链接标签 开始****************************
type:友情链接类型 font表示文字,pic表示图片
num: 获取数据条数
{maccms:link type=pic num=2}
[link:num]序号
[link:name]名称,支持长度控制[link:name len=10]
[link:link]地址
[link:pic]图片
{/maccms:link}
****************************友情链接标签 开始****************************
****************************留言本标签 开始****************************
num:数据条数 默认值10,非分页时使用
pagesize:每页数据条数,分页时使用
by:数据排序依据 id,time
{maccms:gbook num=10 order=desc by=time}
[gbook:num] 排序位
[gbook:numfill] 自动补位序号,个位数前补0
[gbook:numjoin] 如使用start参数,则自动从start开始计数
[gbook:id] 编号id
[gbook:name] 留言昵称
[gbook:content] 留言内容
[gbook:reply] 回复内容
[gbook:ip] 留言者IP
[gbook:time] 留言时间
[gbook:replytime] 回复时间
[gbook:color] 随机颜色
{/maccms:gbook}
****************************留言本标签 开始****************************
****************************评论标签 开始****************************
num:数据条数 默认值10,非分页时使用
pagesize:每页数据条数,分页时使用
by:数据排序依据 id,time
{maccms:comment num=10 order=desc by=time}
[comment:num] 排序位
[comment:numfill] 自动补位序号,个位数前补0
[comment:numjoin] 如使用start参数,则自动从start开始计数
[comment:id] 编号id
[comment:name] 评论昵称
[comment:content] 评论内容
[comment:ip] 评论者IP
[comment:time] 评论时间
[comment:color] 随机颜色
{/maccms:comment}
****************************评论标签 开始****************************
****************************数据区域块标签(首页、地图页的栏目块双层循环) 开始****************************
type: all获取所有分类包含父子,parent获取所有父分类,child获取所有子分类, 1,2,3 指定分类id
by:数据排序依据 id,sort 默认sort
order: 数据排序方式 desc(倒序) asc (正序)
table:必有参数vod则调用视频分类,art调用文章分类。
例: 调用视频分类
{maccms:matrix type=1,2,6 table=vod}
[matrix:num]:序号
[matrix:id]:id
[matrix:name]:名称
[matrix:title]:seo标题
[matrix:key]:seo关键字
[matrix:des]:seo描述
[matrix:count]:包含数据量
[matrix:link]:链接
{maccms:vod num=5 type=[matrix:id] start=1 order=desc by=time}
{/maccms:vod}
{/maccms:matrix}
****************************数据区域块标签(首页、地图页的栏目块双层循环) 结束****************************
****************************分类标签(视频,文章通用) 开始****************************
type:all获取所有分类包含父子,parenet获取所有父分类,child获取所有子分类 ,auto 在分类页、搜索页使用(将进入分类筛选页面和搜索筛选页,自动筛选一二级分类)
by:数据排序依据 id,sort 默认sort
order: 数据排序方式 desc(倒序) asc (正序)
parent: 父栏目ID, 0表示所有顶级栏目, 具体id表示调用指定分类的子分类菜单
num:取分类数目,按照排序顺序。 6表示取得排序前6个分类。
table:必有参数vod则调用视频分类,art调用文章分类。
例:视频单级别分类调用:
{maccms:menu type=parent order=asc table=vod}
[menu:num]:序号
[menu:id]:id
[menu:pid]:父分类id
[menu:name]:名称
[menu:key]:seo关键字
[menu:des]:seo描述
[menu:title]:seo标题
[menu:link]:链接
{/maccms:menu}
****************************分类标签(视频,文章通用) 结束****************************
****************************专题首页标签(视频,文章通用) 开始****************************
pg:页码
特有标签:
****************************专题首页标签(视频,文章通用) 结束****************************
****************************专题列表标签(视频,文章通用) 开始****************************
num:数据条数 默认值10,非分页时使用
pagesize:每页数据条数,分页时使用
id:all表示调出所有专题;id为指定专题ID表示调出某个专题;调出指定多个专题使用英文逗号隔开;默认值为all
by:数据排序依据 id,hits总点击,dayhits日点击,weekhits周点击,monthhits月点击,addtime添加时间,time更新时间,up顶,down踩
order: 数据排序方式 desc(倒序) asc (正序)
table:必有参数vod则调用视频专题,art调用文章专题
{maccms:topic num=3 id=all/特定值/1,3 table=vod}
[topic:num] 排序位
[topic:numfill] 自动补位序号,个位数前补0
[topic:numjoin] 如使用start参数,则自动从start开始计数
[topic:id] 编号id
[topic:name] 专题名称,支持长度控制 len
[topic:count] 专题包含的影片数量
[topic:pic] 专题图片
[topic:sort] 专题排序号
[topic:link] 专题链接
[topic:key] 专题seo关键字
[topic:des] 专题seo描述
[topic:title] 专题seo标题
[topic:level] 推荐值
[topic:hits] 总人气
[topic:dayhits] 日人气
[topic:weekhits] 周人气
[topic:monthhits] 月人气
[topic:addtime] 添加时间:可控时间格式 yy-m-d ,y-m-d , m-d
[topic:time] 更新时间:可控时间格式 yy-m-d ,y-m-d , m-d
[topic:content] 专题描述,支持长度控制 len
[topic:contenttext] 过滤html代码后专题描述
[topic:remarks] 专题备注
[topic:link] 专题链接
{/maccms:topic}
特有标签:
{page:hits} 动态载入专题的点击量
****************************专题列表标签(视频,文章通用) 结束****************************
****************************剧情小分类标签(视频) 开始****************************
type:指定视频顶级分类ID ,auto 在分类页、搜索页使用(将进入分类筛选页面和搜索筛选页,自动筛选一二级分类)
by:数据排序依据 id,sort 默认sort
order: 数据排序方式 desc(倒序) asc (正序)
id: 指定小分类id。多个用逗号连接1,2,3,4
num:取分类数目,按照排序顺序。 6表示取得排序前6个分类。
例:调用ID为1的视频顶级分类的下的 所有剧情分类:
{maccms:class type=1 order=asc}
[class:num]:序号
[class:id]:id
[class:pid]:父分类id
[class:name]:名称
[class:link]:链接
{/maccms:class}
****************************剧情小分类标签(视频) 结束****************************
****************************视频地区、语言、年代标签 开始****************************
地区标签参数:
order: 排序desc倒序,asc正序
type:auto时,分类筛选、搜索页面使用、自动补齐筛选参数
{maccms:area order=desc type=auto}
[area:num] 排序位
[area:name] 地区名称
[area:link] 搜索链接地址
{/maccms:area}
{maccms:area order=desc type=auto}
<a target="_blank" href="[area:link]">[area:name]</a>
{/maccms:area}
语言标签参数:
order:排序desc倒序,asc正序
type:auto时,分类筛选、搜索页面使用、自动补齐筛选参数
{maccms:lang order=desc}
[lang:num] 排序位
[lang:id] 语言id
[lang:name] 语言名称
[lang:link] 搜索链接地址
{/maccms:lang}
{maccms:lang order=desc type=auto}
<a href="[lang:link]">[lang:name]</a>
{/maccms:lang}
年代标签参数:
order:排序desc倒序,asc正序
start:起始年代
end:结束年代
type:auto时,分类筛选、搜索页面使用、自动补齐筛选参数
{maccms:year order=desc type=auto start=2000 end=2012}
<a href="[year:link]">[year:name]</a>
{/maccms:year}
****************************视频地区、语言、年代标签 结束****************************
****************************视频搜索参数和标签详解 开始****************************
参数详解:
wd:名称或主演
ids:数据id支持多个逗号分割 1,2,3
letter:首字母
pinyin:拼音
starring:主演
directed:导演
area:地区
lang:语言
year:上映日期
typeid:所属分类
classid:所属剧情分类
order:排序 desc(倒序) asc (正序)
by:排序字段
index.php?m=vod-search-wd-火影 搜索名称为火影的数据
index.php?m=vod-search-ids-123,567 搜索数据id为 123和567的数据,可以多条,逗号分割
index.php?m=vod-search-starring-刘德华 搜索主演为刘德华的数据
index.php?m=vod-search-letter-A 搜索首字母为A的数据
index.php?m=vod-search-typeid-1-wd-海贼 搜素分类ID为1下属的名称为海贼的数据
index.php?m=vod-search-wd-火影-order-desc-by-hits 搜索名称为火影的数据按照 总人气倒序排列
支持标签:
{page:key} 搜索关键字
{page:des} 搜索关键字描述
{page:wd} 搜索的名称
{page:wdencode} url编码后的名称
{page:pinyin} 搜索的拼音
{page:letter} 搜索的首字母
{page:starring} 搜索的主演
{page:starringencode} url编码后的主演
{page:directed} 搜索的导演
{page:directedencode} url编码后的导演
{page:area} 搜索的地区
{page:areaencode} url编码后的地区
{page:language} 搜索的语言
{page:languageencode} url编码后的语言
{page:year} 搜索的年代
{page:typeid} 搜索的分类id
{page:now} 当前页数
{page:datacount} 搜索结果总数量
{page:size} 搜索结果每页显示数量
{page:count} 搜索数据分页总数
****************************视频搜索参数详解 结束****************************
****************************视频分类列表页参数详解 开始****************************
参数详解:
id:分类id
pg:页码
支持标签:
{page:id} 当前分类id
{page:pid} 当前分类的父级id
{page:name} 当前分类名称
{page:name} 当前分类拼音名称
{page:key} 当前分类seo关键字
{page:des} 当前分类seo描述
{page:title} 当前分类seo标题
{page:link} 当前分类链接
{page:textlink} 当前位置导航链接 例如当前位置:首页 >> 电影 >> 动作片
{page:linkbytime} 进入分页筛选页面,按照时间排序链接
{page:linkbyhits} 进入分页筛选页面,按照人气排序链接
{page:linkbyscore} 进入分页筛选页面,按照评分排序链接
****************************视频分类列表页参数详解 结束****************************
****************************视频分类筛选页参数详解 开始****************************
参数详解:
id:数据id
pg:页码
letter:首字母
area:地区
lang:语言
year:上映日期
order:排序 desc(倒序) asc (正序)
by:排序字段 time时间,hits点击,score评分
index.php?m=vod-list-id-5-pg-1-order-desc-by-hits-year-2013-letter-B-area-大陆-lang-国语
筛选分类为5,第1页,倒序,按人气排序,2013年上映,首字母B,地区大陆,语言国语
支持标签:
{page:id} 当前分类id
{page:pid} 当前分类的父级id
{page:name} 当前分类名称
{page:name} 当前分类拼音名称
{page:key} 当前分类seo关键字
{page:des} 当前分类seo描述
{page:title} 当前分类seo标题
{page:link} 当前分类链接
{page:textlink} 当前位置导航链接 例如当前位置:首页 >> 电影 >> 动作片
{page:year} 筛选参数-上映年代
{page:lang} 筛选参数-语言
{page:langencode} 筛选参数-语言url编码
{page:area} 筛选参数-地区
{page:areaencode} 筛选参数-地区url编码
{page:letter} 筛选参数-首字母
{page:classid} 剧情分类id
{page:classname} 剧情分类名称
{page:linkyear} 筛选链接-年代-全部
{page:linkletter} 筛选链接-首字母-全部
{page:linkarea} 筛选链接-地区-全部
{page:linklang} 筛选链接-语言-全部
{page:linkbytime} 筛选链接-按照时间排序
{page:linkbyhits} 筛选链接-按照人气排序
{page:linkbyscore} 筛选链接-按照评分排序
****************************视频分类筛选页参数详解 结束****************************
****************************分页标签详解 开始****************************
分页标签可用在,首页、分类页、筛选页、专题首页、专题数据列表、搜索页、文章内容页、留言本、评论
参数详解:
len:显示几个数字链接
linktype:分类类型,只在首页分页时用到linktype=index
请自行在模版的css样式表中设计分页样式
<div class="page">{maccms:pages len=6}</div>
<div class="page">共10002条数据 当前:1/834页 首页 上一页 <span class="pagenow">1</span> <a target="_self" class="pagelink_b" href="?m=vod-type-id-1-pg-2.html">2</a> <a target="_self" class="pagelink_b" href="?m=vod-type-id-1-pg-3.html">3</a> <a target="_self" class="pagelink_b" href="?m=vod-type-id-1-pg-4.html">4</a> <a target="_self" class="pagelink_b" href="?m=vod-type-id-1-pg-5.html">5</a> <a target="_self" class="pagelink_b" href="?m=vod-type-id-1-pg-6.html">6</a> <a target="_self" href="?m=vod-type-id-1-pg-2.html" class="pagelink_a">下一页</a> <a target="_self" href="?m=vod-type-id-1-pg-834.html" class="pagelink_a">尾页</a> <input type="input" name="page" id="page" size="4" class="pagego"/><input type="button" value="跳 转" class="pagebtn" /></div>
****************************分页标签详解 结束****************************
****************************视频列表标签 开始****************************
num:数据条数 默认值10,非分页时使用
pagesize:每页数据条数,分页时使用
state: 影片连载 series(连载)
level:推荐种类 1,2,3,4,5 /all
by:数据排序依据 id,addtime添加时间,time更新时间,hits总点击,dayhits日点击,weekhits周点击,monthhits月点击,level推荐值,up顶数,down踩数,score评分,scoreall评分总数,scorenum评分次数, rnd随机数据
order: 数据排序方式 desc(倒序) asc (正序)
type:数据所在分类,可调出多个分类数据,如 1,2,3/all,current列表页当前分类,默认为全部
topic:指定专题 1,2,3/all可调多个 默认无
start:起点位置 1 默认1
day: 单天数据, 0当天数据. 1表示昨天的数据,2表示前天的数据
days:截止到今日数据, 0当天数据,1昨天到今天的数据,2前天到今天的数据
year:上映年代 2014
area: 所属地区 港台
lang: 所属语言 粤语
letter: 首字母 B
starring:调用主演的数据,如starring=刘德华
similar:调用相似相关数据 starring主演相似,directed导演相似、tag相似、name名称相似
label:自定义页面名称,不带label_前缀,如 hot.html; 只在自定义页面中使用,可生成自定义页面的分页.
maxpage:自定义页面中,最大分页数量。
{maccms:vod num=15 order=desc by=time type=all topic=1,2,3 level=1,2 start=5 area=大陆 lang=粤语 letter=A}
[vod:num] 序号
[vod:numfill] 自动补位序号,个位数前补0
[vod:numjoin] 如使用start参数,则自动从start开始计数
[vod:id] 编号
[vod:name] 名称:可控长度
[vod:encodename] 名称:urlencode编码,可用于搜索
[vod:colorname] 带颜色名称:可控长度
[vod:subname] 副标名称:可控长度
[vod:enname] 拼音名:可控长度
[vod:ennamelink] 拼音名搜索链接
[vod:letter] 首字母
[vod:letterlink] 首字母搜索链接
[vod:state] 状态
[vod:color] 颜色
[vod:pic] 图片
[vod:picthumb] 缩略图片
[vod:picslide] 幻灯图片
[vod:tag] TAG
[vod:taglink] TAG链接
[vod:starring] 主演:可控长度
[vod:starringlink] 主演搜索链接
[vod:directed] 导演:可控长度
[vod:directedlink] 导演搜索链接
[vod:year] 发行日期
[vod:yearlink] 发行日期搜索链接
[vod:area] 发行地区
[vod:arealink] 发行地区搜索链接
[vod:language] 发行语言
[vod:languagelink] 语言搜索链接
[vod:level] 推荐值
[vod:stint] 播放每集所需积分
[vod:stintdown] 下载每集所需积分
[vod:hits] 总点击量
[vod:dayhits] 今天点击量
[vod:weekhits] 本星期点击量
[vod:monthhits] 本月点击量
[vod:content] 描述:可控长度
[vod:contenttext] 过滤html后的描述:可控长度
[vod:remarks]备注
[vod:good] 顶数
[vod:bad] 踩数
[vod:score] 平局分
[vod:scoreall] 总评分数
[vod:scorenum] 评分次数
[vod:duration] 数据播放时长
[vod:addtime style=y-m-d] 添加时间:可控时间格式 yy-m-d ,y-m-d , m-d
[vod:time style=y-m-d] 更新时间:可控时间格式 yy-m-d ,y-m-d , m-d
[vod:from] 播放类型
[vod:fromdown] 下载类型
[vod:link] 链接
[vod:playlink] 播放链接,默认是第1组播放器的第1条数据
[vod:playlinks] 播放链接组,所有播放组的第1条数据链接 ,解析出来是 <a href="/?m=vod-play-id-1-src-1-num-1.html" target="_blank" class="playlink_qvod">快播qvod</a> <a href="/?m=vod-play-id-1-src-2-num-1.html" target="_blank" class="playlink_gvod">迅播gvod</a>
[vod:downlink] 下载链接,默认是第1组下载器的第1条数据
[vod:downlinks] 下载链接组,所有下载组的第1条数据链接 ,解析出来是 <a href="/?m=vod-down-id-1-src-1-num-1.html" target="_blank" class="downlink_http">http下载</a> <a href="/?m=vod-down-id-1-src-2-num-1.html" target="_blank" class="downlink_ftp">ftp下载</a>
[vod:type] 分类ID
[vod:typepid] 父分类ID
[vod:typelink] 父分类链接
[vod:typepname] 父分类名
[vod:typepenname] 父分类拼音名
[vod:typepkey] 父分类seo关键字
[vod:typepdes] 父分类seo描述
[vod:typeptitle] 父分类seo标题
[vod:typelink] 分类链接
[vod:typeexpandlink] 扩展分类链接
[vod:typename] 分类名
[vod:typeenname] 分类拼音名
[vod:typekey] 分类seo关键字
[vod:typedes] 分类seo描述
[vod:typetitle] 分类seo标题
[vod:classname] 剧情分类名称,多个用空格连接
[vod:classlink] 剧情分类链接,多个用空格连接
[vod:topiclink] 专题链接
[vod:userfav] 用户收藏链接
{/maccms:vod}
****************************视频列表标签 结束****************************
****************************视频内容页、播放页标签 开始****************************
调用当前视频数据的标签,同vod标签, 例如[vod:id] [vod:name]
支持标签:
[vod:comment] 评论
[vod:hits] 动态载入点击量并更新点击量,如不使用该标签点击量将不会增加
[vod:fav] 收藏到浏览器链接
[vod:share] 分享当前地址链接,复制到剪切板
[vod:error] 报错链接
[vod:digg] 顶踩功能
[vod:history] 历史记录标签,使用该标签才会记录浏览历史,否则不记录
[vod:scoremark1] 星星评分功能
[vod:scoremark2] 普通评分功能
[vod:prelink] 上一条记录
[vod:nextlink] 下一跳记录
[vod:textlink] 当前位置导航链接 例如当前位置:首页 >> 电影 >> 动作片 >> 火影忍者
播放页特有标签:
[vod:playerinfo]
[vod:player] 这2个是播放器代码,必须有。
-------------------非静态单播放页模式可以用标签--------------
[vod:playnum] 当前第几集
[vod:playname] 当前集数名称
[vod:playurlpath] 当前播放数据的真实播放地址
[vod:playfrom] 当前播放数据的来源标记 例如:youku
[vod:playshow] 当前播放数据的来源显示名称 例如:优酷视频
-------------------------------------------------------------
下载页特有标签:
[vod:downinfo]
[vod:downer] 这2个是必须调用的代码。
-------------------非静态单下载页模式可以用标签--------------
[vod:downnum] 当前第几集
[vod:downname] 当前集数名称
[vod:downurlpath] 当前数据的真实播放地址
[vod:downfrom] 当前数据的来源标记 例如:xunlei
[vod:downshow] 当前数据的来源显示名称 例如: 迅雷下载
-------------------------------------------------------------
播放列表标签,下载列表标签
from:current 在播放页面可以只获取当前组的列表,不能用在静态模式生成单页中。
{maccms:play}
[play:num] 序号
[play:count] 共有几组播放地址
[play:urlcount] 当前播放租共有多少条播放地址
[play:from] 播放组来源
[play:sort] 播放组排序号
[play:tip] 播放组提示说明
[play:show] 播放组名称
[play:server] 播放组-服务器组名称
[play:serversort] 播放组-服务器组排序号
[play:serverurl] 播放组-服务器组地址
[play:servertip] 播放组-服务器组提示信息
{maccms:url order=desc} desc倒序, asc正序
[url:num] 顺序号
[url:name]集数名称
[url:link]播放链接
[url:path]播放片源地址
{/maccms:url}
{/maccms:play}
模式2:竖排显示
{maccms:play type=mode2 order=asc}
<li><span>[play:num].[play:name]</span>
{maccms:url order=asc}
<a class="play_ico play_ico_[url:from]" title="[url:name]" href="[url:link]"> </A>
{/maccms:url}
{/maccms:play}
显示效果是:每一行显示添加的所有播放组
第一集: 优酷 土豆 快播 百度
第二集: 优酷 土豆 快播 百度
此模式建议关闭播放器的头部和列表,以达到最佳显示效果。
添加时候的时候需要注意,需要某组播放器的某集数据暂缺的话,请把当前集数的地址设置为no,正常数据的[url:from]为播放类型如youku,baidu,暂缺数据的播放类型+no如youkuno,qvodno, 用此来区别显示图片。
系统默认模板那只了这套模式的图片和css,play_mode2.css , play_mode2.gif 有需要的可自行修改。
from:current 在播放页面可以只获取当前组的列表,不能用在静态模式生成单页中。
{maccms:down}
[down:num] 序号
[down:count] 共有几组播放地址
[down:urlcount] 当前播放租共有多少条播放地址
[down:from] 播放组来源
[down:sort] 播放组排序号
[down:tip] 播放组提示说明
[down:show] 播放组名称
[down:server] 播放组-服务器组名称
[down:serversort] 播放组-服务器组排序号
[down:serverurl] 播放组-服务器组地址
[down:servertip] 播放组-服务器组提示信息
{maccms:url order=desc} desc倒序, asc正序
[url:num] 顺序号
[url:name] 集数名称
[url:link] 下载链接
[url:path] 下载片源地址
{/maccms:url}
{/maccms:down}
****************************视频内容页、播放页标签 结束****************************
{page:link} 当前分类链接
{page:textlink} 当前位置导航链接 例如当前位置:首页 >> 电影 >> 动作片
****************************文章分类列表页参数详解 结束****************************
****************************文章列表标签 开始****************************
num:数据条数 默认值10,非分页时使用
pagesize:每页数据条数,分页时使用
by:数据排序依据 id,hits总点击,dayhits日点击,weekhits周点击,monthhits月点击,addtime添加时间,time更新时间
order: 数据排序方式 desc(倒序) asc (正序)
start:起点位置 1 默认1
type:文章分类id 1,2/all
topic:文章专题id 1,2/all
day: 单天数据, 0当天数据. 1表示昨天的数据,2表示前天的数据
days:截止到今日数据, 0当天数据,1昨天到今天的数据,2前天到今天的数据
similar:调用相似相关数据 tag相似、name名称相似
letter: 首字母
level:推荐种类 1,2,3,4,5 /all
{maccms:art num=3 order=desc by=time type=1}
[art:num] 排序位
[art:numfill] 自动补位序号,个位数前补0
[art:numjoin] 如使用start参数,则自动从start开始计数
[art:id] 编号id
[art:name] 标题:可控长度
[art:encodename] url编码后的标题
[art:enname] 拼音标题:可控长度
[art:letter] 首字母
[art:subname] 副标题:可控长度
[art:colorname] 带颜色标题:可控长度
[art:from] 来源
[art:content] 内容
[art:contenttext] 过滤html代码后内容
[art:author] 作者
[art:color] 颜色
[art:level] 推荐值
[art:hits] 总人气
[art:dayhits] 日人气
[art:weekhits] 周人气
[art:monthhits] 月人气
[art:addtime] 添加时间:可控时间格式 yy-m-d ,y-m-d , m-d
[art:time] 更新时间:可控时间格式 yy-m-d ,y-m-d , m-d
[art:pic] 图片
[art:type] 分类ID
[art:typepid] 父分类ID
[art:typepname] 父分类名称
[art:typeplink] 父分类链接
[art:typepkey] 父分类seo关键字
[art:typepdes] 父分类seo描述
[art:typeptitle] 父分类seo标题
[art:typename] 分类名称
[art:typelink] 分类链接
[art:typekey] 分类seo关键字
[art:typedes] 分类seo描述
[art:typetitle] 分类seo标题
[art:link] 链接
{/maccms:art}
****************************文章列表标签 结束****************************
****************************文章内容页标签 开始****************************
调用当前视频数据的标签,同art标签, 例如[art:id] [art:name]
[art:comment] 评论
[art:hits] 动态载入点击量并更新点击量,如不使用该标签点击量将不会增加
[art:prelink] 上一条记录
[art:nextlink] 下一条记录
[art:fav] 收藏到浏览器链接
[art:share] 分享当前地址链接,复制到剪切板
[art:digg] 顶踩功能
[art:prelink] 上一条记录
[art:nextlink] 下一跳记录
[art:textlink] 当前位置导航链接 例如当前位置:首页 >> 新闻 >> 第一条文章
****************************文章内容页标签 结束****************************
JS的发展史:
1、1992年 Nombas 开发了一款语言 ScriptEase
2、1995年 Netscape(网景) 开发了一款语言 LiveScript,更名为 Javascript
3、1996年 Microsoft(微软) 开发了一款语言 JScript
4、1997年 网景 将Javascript 1.1 提供给了ECMA(欧洲计算机制造商联合会),ECMA 获取了 JS 的核心,称之为 ECMA Script (ES)
完整的JS组成:
1、核心(ES)
2、文档对象模型(Document Object Model) - DOM
允许让 JS 与 HTML 文档打交道
3、浏览器对象模型(Browser Object Model) - BOM
允许让 JS 与 浏览器进行交互
JS是一款基于对象的编程语言
2、JS的基础语法
1、浏览器内核
内核负责页面内容的渲染,由以下两部分组成:
1、内容排版引擎 - 解析HTML/CSS
2、脚本解释引擎 - 解析Javascript
2、搭建JS运行环境(重点)
1、独立安装的JS解释器 - NodeJS
console.log("Hello World");
console.log('Hello World');
2、使用浏览器中的内核(JS解释引擎)
1、在浏览器的控制台(Console)中,输入脚本并执行
2、将JS脚本代码嵌入在HTML页面中执行
1、采用HTML元素事件执行JS代码
1、onclick
当元素被点击时执行的操作
ex: 当按钮被点击时,在控制台中输出 Hello World
2、将JS脚本编写在 [removed][removed] 并嵌入在HTML文档的任何位置
[removed]
console.log("... ...");
[removed]("Hello Wolrd");
[removed]
3、将JS脚本编写在外部独立的JS脚本文件中(***.js)
1、编写JS脚本文件
2、在HTML中引入脚本文件
[removed][removed]
1、先创建一个 base.js 的文件
2、在文件中执行以下代码
console.log(" .... ... ");
[removed](" ... ... ");
window.alert("这是在外部脚本文件中的内容");
3、在 html 文档中,引入 base.js 文件
3、JS调试
当代码编写出现错误时,在运行的时候,在错误位置会停止
碰到错误代码,会终止当前语句块的执行,但不影响后续块的执行
[removed][removed] 为一块
4、JS语法
1、语句 - 可以被JS引擎执行的最小单元
由表达式、关键字、运算符 来组成的
严格区分大小写 :name 和 Name
所有的语句都是以 ; 来表示结束
所有的标点符号都是英文的
; 和 ;
. 和 。
: 和 :
" 和 “
' 和 ‘
() 和 ()
[] 和 【】
{} 和 {}
单行注释: //
多行注释: /* */
3、变量 与 常量
1、什么是变量
用来存储数据的一个容器
2、声明变量(重点)
1、声明变量
var 变量名;
2、为变量赋值
变量名=值;
3、声明变量并赋初始值
var 变量名=值;
1、变量在声明时没有赋值的话,那么值为 undefined
2、声明变量允许不使用var关键字,但并不推荐
1、创建一个网页 04-variable.html
2、声明一对 [removed][removed],并完成以下变量的声明
1、声明一个变量用于保存用户的姓名,并赋值为 "张三丰";
2、声明一个变量用于保存用户的年龄,赋值 68
3、如何 将变量的数据 打印在控制台上??
4、一条语句中声明多个变量
var 变量名1=值,变量名2=值,变量名3;
3、变量名命名规范
1、由字母,数字,下划线以及 $ 组成
var user_name; 正确
var user-name; 错误
var $uname; 正确
2、不能以数字开头
var 1name;错误
3、不能使用JS中的关键字 和 保留关键字
4、变量名不能重复
5、可以采用"驼峰命名法",小驼峰命名法使用居多
6、最好见名知意
var a;
var uname;
4、变量的使用
1、为变量赋值 - SET操作
只要变量出现在 赋值符号(=)的左边一律是赋值操作
var uname="张三丰";
uname="张无忌";
2、获取变量的值 - GET操作
只要变量没有出现在赋值符号(=)的左边,一律是取值操作
var uname="wenhua.li";//赋值操作
console.log(uname);
var new_name = uname;
new_name 是赋值操作
uname 是取值操作
uname = uname + "bingbing.fan";
赋值符号出现的话,永远都是将右边的值,赋值给左边的变量(从右向左运算)
1、什么是常量
在程序中,一旦声明好,就不允许被修改的数据
2、声明常量
const 常量名=值;
常量名在命名时采用全大写形式
1、声明一个变量 r ,来表示一个圆的半径,并赋值
2、声明一个常量PI ,来表示圆周率3.14
3、通过 r 和 PI 来计算 该圆的周长,保存在变量l中
周长 = 2 * π * 半径
4、通过 r 和 PI 来计算 该圆的面积,保存在变量s中
面积 = π * r * r;
5、在控制台中打印输出
半径为 * 的圆的周长是 *
半径为 * 的圆的面积是 *
1、定义一个函数 change ,该函数中接收两个参数(a,b)
2、在函数体中,如果 a 大于 b的话,则交换两个数字的位置,再打印输出结果
3、通过一个按钮调用函数,并且将 两个数字传递给函数
4、常用带参函数
parseInt(变量);
parseFloat(变量);
Number(变量)
console.log("");
3、带返回值的函数
var result = parseInt("35.5");
1、什么是返回值
由函数体内 带到 函数体外的数据,叫做"返回值"
function 函数名(参数列表){
return 值;
允许通过一个变量来接收调用函数后的返回值
var 变量名 = 函数名(实参列表);
定义一个可以接收三个Number参数的方法(名称为getMax),在该方法中,计算并返回 最大的数值
3、作用域
1、什么事作用域
指的是变量和函数的可访问范围,作用域分为以下两类
1、函数作用域
只在定义的函数内允许访问变量 和 函数
2、全局作用域
一经定义,在任何位置处都能访问
2、函数作用域中的变量
在某个函数中声明的变量,就是函数作用域中的变量,也可以称之为 "局部变量"。
function calSum(){
var a = 3;
var b = 5;
console.log(a,b); // 输出 3 5
console.log(a,b); //错误,因为 a ,b已经出了它的定义范围
1、定义一个 函数calSum,声明两个变量a,b,并赋值,并且在函数内打印两个变量
2、定义一个 函数calMax,直接打印输出 a,b,观察结果
3、全局作用域中的变量
一经声明了,任何位置都能使用。也称为 "全局变量"
声明方式:
1、将变量声明在最外层,所有的function之外
[removed]
var a = 15;
var b = 18;
function showMsg(){
console.log(a);
console.log(b);
[removed]
2、声明变量时,不使用var关键字,一律是全局变量,但有风险
全局变量 ,尽量都声明在 所有的 function 之外
声明变量时,也一律都使用 var 关键字
4、声明提前
function show(){
console.log(num);//报错
1、什么是声明提前
JS程序在正式执行前,会将所有var声明的变量以及function声明的函数,预读到所在作用域的顶端。但赋值还保留在原位置上
最好将变量的声明 和 函数的声明都集中到所在作用域的最顶端
5、按值传递
function change(a,b){
a ^= b;
b ^= a;
a ^= b;
console.log("在change函数中");
console.log(a,b);
function testChange(){
var a = 15;
var b = 18;
console.log("调用前:");
console.log(a,b);//15 18
change(a,b);
console.log("调用后:");
console.log(a,b);//15 18
1、什么是按值传递
基本数据类型的数字在做参数传递时,实际上时传递的实参的副本到函数中,原始数据并未发生过改变
基本数据类型的数据在做参数传递时,尽量不要在函数中修改,因为即便修改,也不会影响原数据的
6、局部函数
将函数 再声明在某个函数内,就是局部函数
[removed]
function show(){
function inner(){
console.log("show 中的 inner 函数");
inner();//正确
inner(); // 错误,inner 是局部函数,只能在 show中被调用
[removed]
7、全局函数
ECMAScript预定义的全局函数,可供用户直接使用
1、paseInt();
2、parseFloat();
3、Number();
4、isNaN();
5、encodeURI()
URL:Uniform Resource Locator :统一资源定位符/器
URI:Uniform Resource Identifier : 统一资源标识符
对统一资源标识符格式的字符串进行编码,并返回编码后的字符串
编码:将多字节的字符,编译成多个单字节的字符
6、decodeURI()
对已编码的URI进行解码(将已编码内容再转换回中文)
7、encodeURIComponent()
在 encodeURI 基础之上,允许将 特殊符号(:,/,...) 进行编码
8、decodeURIComponent()
9、eval()
作用:计算并执行以字符串方式表示的JS代码
var msg = "console.log('Hello World');";
eval(msg);//将 msg 作为 JS代码去执行
1、创建页面,通过弹框,输入一段JS代码
2、通过 eval() ,将输入的JS代码执行一次
3、递归调用
1、什么是递归
递归指的是在一个函数中,又一次的调用了自己
2、递归的实现
1、边界条件
2、递归前进 - 继续调自己
3、递归返回 - 向上返回数据
3、解决问题
1、计算某个数字的阶乘
5!=5*4*3*2*1
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
/*计算 n 的阶乘*/
function f(n){
... ...
已知下列数列 (菲波那切数列)
1,1,2,3,5,8,13,21,34,55,... ...
已知 第一个数为1,第二个数为1
从第三个数开始,每个数字等于前两个数之和
问题:通过一个函数,求某个位置上的数字(用递归实现)
1、使用 continue ,打印输出 1-100之间所有偶数的和
2、让用户循环从弹框录入信息,并将信息打印在控制台上,直到用户输入 exit 为止
输入数据:sanfeng.zhang
sanfeng.zhang
输入数据:wuji.zhang
wuji.zhang
输入数据:exit
3、猜数字游戏
1、随机生成一个 1-100 之间的数字
Math.random() 返回 0-1 之间的小数
var r = parseInt(Math.random()*100)+1;
2、要求用户输入一个整数
若比生成的随机数大,则输出 “猜大了”
若比生成的随机数小,则输出 “猜小了”
直到用户 猜对为止
3、如果用户输入exit ,也可以退出游戏
用户从弹框中输入年,月,日,判断该日是星期几?
1900年1月1日 是星期1
推荐思路:
从1900年1月1日 到 输入的年月日 共有多少天求出来,与 7 取余
1、通过一个循环计算从1900年 到输入年前一年有多少天?
2、再从1月,到输入月份的前一个月共有多少天?
3、再累加 输入的日
4、用整体结果 与7取余,给出提示
附加作业:
将 输入的月份的日历打印输出
2017年8月
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
4、有一对兔子,从出生后的第3个月起都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死的话,打印输出 前10个月,每个月有多少对兔子
n1 n2 n1 n2 n1 n2
1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55
2、三个表达式的特殊用法
1、for(;;)
三个表达式可以任意的省略,不推荐省略
2、for 第一个 和 第三个表达式的多样化
for(var i=1,j=2;i=1;i++,j--){
console.log(i+"+"+j+"="+(i+j));
3、嵌套循环
在一个循环的内部又出现一个循环
for(var i=0;i<10;i++){ // 外层循环
for(var j=0;j<10;j++){ // 内层循环
外层循环执行一次,内层循环要执行一轮
1、控制台中输出下面的图形
******
******
******
******
******
*****
*****
*******
*********
1、什么是数组
数组,即一组数据,使用一个变量来存放多个数据
数组中的元素是按照"线性"书序来排列的,所以也可以称之为是一个 "线性表"
2、声明数组
1、声明一个空数组变量
var 数组名 = [];
2、声明数组并赋初始值
var 数组名 = [数据1,数据2,数据3,... ...];
3、声明一个空数组变量
var 数组名 = new Array();
4、声明一个数组并赋初始值
var 数组名 = new Array(数据1,数据2,... ...);
1、创建一个函数,分别用两种不同的方式创建数组(arr1,arr2)
arr1保存 :张三丰,张翠山,张无忌
arr2保存 :金花婆婆,殷素素,赵敏
2、直接将数组打印在控制台上
3、数组是引用类型的对象
引用类型的对象,是将数据保存在 "堆" 中的
在"栈"中,会对 "堆" 中数据的地址进行引用
1、将数组赋值给其它变量时,实际赋的是数组的地址
1、创建一个数组 arr1 ,包含"张无忌","赵敏"
2、将 arr1 赋值给 arr2
3、将 arr2 的第一个元素更改为 "金花婆婆",打印输出 arr1 和 arr2 中的所有元素
2、数组在做参数的时候,传递进去的实际上是地址(按引用传递 即 按地址传递)
1、创建一个数组array,保存"张无忌","赵敏"俩元素
2、创建一个函数change,接收一个数组作为参数,在函数体内,将第一个元素更改为"金花婆婆"
3、调用change函数,并将array数组作为参数,调用完成后,打印array的值,观察结果
4、修改change函数,在函数体内,将传递进来的数组重新new一个Array("孙悟空","猪八戒")
5、重复步骤三,观察结果
3、null
表示的是让引用类型的对象不再指向任何空间.一般用于主动释放对象的空间
//让 array 指向数组的地址
var array = ["wuji.zhang","zhaomin"];
//释放 array空间,不再指向任何地址
array = null;
4、访问数组的元素
赋值,取值,都是使用 下标 来完成的
1、为数组的元素赋值
数组名[下标] = 值;
var array = ["张无忌","赵敏"];
array[1] = "周芷若";
array[2] = "小昭";//增加一个新元素,在第3个位置处
array[5] = "灭绝师太";
2、获取数组中的值
数组名[下标];
3、length属性
作用:获取数组的长度(数组中元素的个数)
1、允许将数组的length属性值设置为0,来完成数组元素的清空操作
2、配合循环 做数组的循环遍历操作
var array = ["张无忌","赵敏"];
第1名 :张无忌
第2名 :赵敏
for(var i=0;i"sanfeng.zhang"];
用字符串做下标,就是关联数组
var array = []; //声明一个空数组
array["西游记"] = "古代神话故事";
array["红楼梦"] = ["贾宝玉","林黛玉","刘姥姥"];
Q : array.length
1、关联数组是不算做数组内容的,不记录到 length 中
2、关联数组只能通过 字符串 做下标取值
3、允许通过 for...in 来循环遍历关联数组的字符串下标(也能遍历出内容的数字下标)
3、冒泡排序
[23,9,78,6,45] -> [6,9,23,45,78]
冒泡排序:车轮战,两两比较,小的靠前
1、轮数 :共比较了 length - 1 轮
2、每轮中比较的次数 :随着轮数的增加,次数反而减少
双层循环表示整个排序的过程
1、外层循环 :控制比较的轮数,从1开始,到length-1(能取到)结束
2、内层循环 :控制每轮中比较的次数,并且也要表示参与比较的元素的下标,从0开始,到 length-1-i(轮数变量)
[23,9,78,6,45]
共5个元素
外层:从 1 开始,到 4 结束
第一轮 第一次:从 0 开始 ,到 3 结束
第二轮 第一次:从 0 开始 ,到 2 结束
... ...
2、数组的常用方法
1、toString()
将一个数组转换为字符串
语法:var str = 数组对象.toString();
2、join()
作用:将数组中的元素通过指定的分隔符连接到一起,并返回连接后的字符串
语法:var str = 数组对象.join("&");
练习:(10分钟)
1、使用数组实现由 * 组成的三角形
直角三角形,等腰三角形
*****
2、使用数组实现 九九乘法表
3、连接数组
函数:concat()
作用:拼接两个或更多的数组,并返回拼接后的结果
语法:var result=arr1.concat(arr2,arr3,arr4);
1、concat不会改变现有数组,而是返回拼接后的
2、每个参数不一定非是数组,也可以是普通的数据
1、声明两个全局数组,分别保存一些国家的名称
数组1:选中的国家
sel = ["中国","美国","俄罗斯","日本"];
数组2:备选国家
unsel=["朝鲜","越南","老挝","柬埔寨"];
2、将 备选国家 全部移入到 入选国家中,打印数据
sel = ["中国","美国","俄罗斯","日本","朝鲜","越南","老挝","柬埔寨"];
unsel=[];
4、获取子数组
函数:slice()
作用:从指定数组中,截取几个连续的元素组成的新数组
语法:arr.slice(start,[end]);
start:从哪个下标处开始截取,取值为正,从前向后取,取值为负,从后向前算位置。
0 1 2 3
var arr=["中国","美国","日本","英国"];
-4 -3 -2 -1
end : 指定结束处的下标(不包含),该参数可以省略,如果省略的话,就是从start一直截取到结束
1、该函数不会影响现有数组,会返回全新的数组
var arr=["中国","美国","日本","英国"];
取出 美国 和 日本 组成的一个子数组
5、修改数组
函数:splice()
作用:允许从指定数组中,删除一部分元素,同时再添加另一部分元素
arr.splice(start,count,e1,e2,... ...);
start:指定添加或删除元素的起始位置/下标
count:要删除的元素个数,取值为0表示不删除
e1,e2,... ... : 要增加的新元素,允许多个
返回值:返回一个由删除元素所组成的数组
注意:splice 会改变现有数组
在 sel 和 unsel 的基础上完成下列操作
1、从备选国家中(unsel),选择一个国家移入到 选中的国家(sel)
推荐步骤:
1、用户输入 :越南
从 unsel 中将越南移除
再将 越南 sel 的末尾处
2、用户输入 :墨西哥
提示:国家不存在
6、数组的反转
作用:颠倒数组中元素的顺序
语法:arr.reverse();
注意:该函数会改变当前数组的内容
1、声明一个整数数组
2、倒序打印输出内容(使用reverse())
7、数组排序
函数:sort();
语法:arr.sort(排序函数);
作用:默认情况下,按照元素的Unicode码大小按升序排列
特殊:允许自己指定排序函数,从而实现对数字的升序和降序的排列
语法:arr.sort(排序函数);
var arr = [12,6,4,72,115,89];
//排序函数(升序)
function sortAsc(a,b){
return a-b;
arr.sort(sortAsc);
1、指定排序函数 如 sortAsc,定义 两个参数,如 a 和 b。数组会自动传递数据到 sortAsc 里面去,如果返回值是>0的数,则交换两个数的位置,否则不变
使用匿名函数完成排序:
arr.sort(function(a,b){return a-b;});
1、声明一个整数数组,随意定义数字
2、页面上添加两个按钮,一个"升序"按钮,一个"降序"按钮
3、点击 升序 按钮时,数组按升序排序,并打印
4、点击 降序 按钮时,数组按降序排序,并打印
8、进出栈操作
JS是按照标准的"栈式操作"访问数组的
所有的"栈式操作"的特点都是"后进先出"
"栈式操作"讲究的"入栈"和"出栈"
1、push()
入栈,在栈顶(数组的尾部)添加指定的元素,并返回新数组的长度
var arr = [10,20,30];
//向栈顶增加新数据 40
var len = arr.push(40);
//len 保存的是 40 入栈后 arr 的长度,值是4
2、pop()
出栈,删除并返回栈顶的(数组尾部)元素
var arr = [10,20,30];
var r1 = arr.pop();//arr = [10,20]
var r2 = arr.pop();//arr = [10]
==============================
arr :
r1 : 30
r2 : 20
3、shift()
删除数组头部的(第一个)元素并返回
var arr = [10,20,30];
var r1 = arr.shift();
============================
arr : [20,30]
r1 : 10
4、unshift()
作用:在数组的头部(第一个)元素位置处,增加新元素
var arr = [10,20,30];
arr.unshift(40);
arr : [40,10,20,30]
3、二维数组
1、什么是二维数组
一个数组中的元素又是一个数组,也可以称之为:数组的数组
2、创建二维数组
var names=[
["孙悟空","猪八戒","沙悟净"],
["潘金莲","西门庆","武大郎"],
["贾宝玉","刘姥姥","林黛玉"],
["貂蝉","貂蝉","貂蝉"]
//获取猪八戒
console.log(names[0][1]);
//获取林黛玉
console.log(names[2][2]);
1、通过 进出栈 操作,完成 十进制对二进制的转换
1、创建一个函数 decode2bin,接收一个十进制的数字做参数
2、函数体中,将参数 拆成二进制数字,保存在一个数组中
3、将数组的元素使用""连接,并返回
十进制 转 二进制 :除2取余法
num : 5
num % 2 : 结果为 1
num = parseInt(num / 2) : 结果 2
num % 2 : 结果为 0
num = parseInt(num / 2) : 结果 1
num % 2 : 结果为 1
num = parseInt(num / 2) : 结果 0
结果为 0 时则不用再继续 %2
2、根据省份信息,查询城市列表
1、创建一个全局数组,保存几个省份名称
2、创建一个全局二维数组,保存不同省份中的城市信息(数据要与省份数组中的数据对应的上)
3、创建一个函数,接收一个省份名称做参数,打印该省份中对应的所有的城市信息
var now = new Date(); //当前日期
var nowDayOfWeek = now.getDay(); //今天本周的第几天
var nowDay = now.getDate(); //当前日
var nowMonth = now.getMonth(); //当前月
var nowYear = now.getYear(); //当前年
nowYear += (nowYear < 2000) ? 1900 : 0; //
var last
var eachWeek = []
var index = 1
var yearStart = new Date(year.toString() + '/1/1').valueOf()
var yearEnd = new Date((Number(year) + 1).toString() + '/1/1').valueOf() - 1
for (var i = year
function getYearWeek(date) {
var date2 = new Date(date.getFullYear(), 0, 1);
var day1 = date.getDay();
if (day1 == 0) day1 = 7;
var day2 = date2.getDay();
if (day2 == 0) day2 = 7;
d = Math.round((d
<div class="btn-group">
<button type="button" class="my my1 btn btn-primary dropdown-toggle ft18" data-toggle="dropdown" style="width: 190px;">
// 第n年的第n周,获取开始和结束时间 (星期一为一周的开始)
function week_date(weekstr){
let year = weekstr.split("-")[0]
let weekNo = weekstr.split("-")[1]
// 此年1号是星期几
let oneday = new Date(year+'-01-01')....
最近在一个项目中遇到一个查询页面,其中一个查询条件是根据选择的年份、月以及周数显示选择的该周从几号到几号,这样一个需求。在网上搜索了一下,有类似的但是没有完全一样的,只好自己动手。思路是首先取得所选择的该年月1号这一天是星期几,然后算出这一周中周一的日期。以此为基点,第1周的结束日即为这一天加6,第2周的开始日为这一天加7,结束日为这一天加13,以此类推,直到推算出第5周的开始日和结束日。具体代码