JavaScript--兼容问题总结
以下兼容主要面向IE8以上的兼容。
一.window.navigator浏览器信息
<script>
console.log(window.navigator);
// 用户浏览器的类型 到底是 谷歌还是火狐,ie等
console.log(window.navigator.userAgent);
// 判断浏览器所在的系统平台类型 ,window还是mac
console.log(window.navigator.platform);
</script>
二.查找页面元素的几种方式
<script>
window.onload = function () {
// 无兼容问题放心使用
// 1) 通过id查找元素,获取到匹配的第一个id元素
// var btn = document.getElementById('btn');
// console.log(btn);
// 2) 通过标签名称查找元素,获取到的是伪数组
// var buttons = document.getElementsByTagName('button');
//// 伪数组不能调用数组里的全部方法和属性
//// console.log( buttons.push("123") ); // 报错
// console.log( buttons ); // 了解:兼容问题 ie 9+
// 3) 通过类名查找元素,获取到的是伪数组 ie 9+
// var btnClass = document.getElementsByClassName("btn-class");
// console.log(btnClass); // 4) 通过name属性查找元素,获取到的是伪数组
// name标准用法应该是表单的,如提交表单数据时,name是作为数据的key
// var btnName = document.getElementsByName('btn-name');
// console.log(btnName); // 5) 通过合法的css选择器去查找到第一个元素
// var query1 = document.querySelector("#btn");
// var query1 = document.querySelector("[name='btn-name']");
// console.log(query1);
//
// 6) 通过合法的css选择器去查找到所有元素(做手机项目的时候常用)
// var query2 = document.querySelectorAll("#btn"); // 不推荐用这种方式找id
var query2 = document.querySelectorAll(".btn-class");
console.log(query2); }
</script>
三.innerText、innerHTML、textContent兼容问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
* innerHTML
* 全部浏览器都兼容
* innerText firefox45+后支持
* ie,chrome,opera,safari,firefox45+
* textContent ie9+
* firefox,chrome, ie9+
*
* */
window.onload = function () {
var btns = document.getElementsByTagName('button');
var uls = document.getElementsByTagName('ul');
btns[0].onclick = function () {
// 如果innerText获取到不是undefined,说明兼容innerText
if( uls[0].innerText !== undefined ){
uls[0].innerText = "123";
}else{
// 其他情况:如低版本获取用另一种方式修改
uls[0].textContent = "低版本火狐修改";
}
} }
</script>
</head>
<body>
<button>换一换新闻</button>
<ul>
<li>牛大</li>
<li>拉面的老板去参加比赛了</li>
</ul>
</body>
</html>
四.注册事件的三种方式、解绑事件的兼容方式、阻止事件传播(冒泡)
1.注册事件的三种方式
<script>
window.onload = function () { /**
* 一、事件三要素
* 事件源
* 事件类型
* 事件处理程序
*
*
* 二、注册事件三种方式
* 第一种:
* 事件源.on事件类型 = 事件处理程序
* 第二种: ie8不支持
* 事件源.addEventListener('事件类型',事件处理程序,false)
* 第三种: chrome、Firefox、Safari、ie11都不支持,ie6~10支持
* 事件源.attachEvent('on事件类型',事件处理程序)
*
* */
var btn = document.getElementById('btn'); // 第一种:快速注册事件
// btn.onclick = function () {
// alert("我们给按钮添加了一个事件");
// } // 第二种:事件监听 不支持ie8
// 事件源.addEventListener('事件类型',事件处理程序) false是事件冒泡(默认) true是事件捕获
btn.addEventListener('click',function () {
alert("我们给按钮添加了一个事件");
}); btn.addEventListener('click',function () {
alert("AAAAAAA");
},false); // 第三种:事件监听 Chrome、Firefox、Safari,ie11都不支持,ie6~10支持
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件");
// });
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件2222");
// });
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件3333");
// }); }
</script>
事件注册兼容处理:
<script>
/*
谷歌和ie8注册方式不同,
所以我们要进行判断支持哪种注册方式,就使用哪种注册方式添加事件
*/
function myEventListener(element,type,fn) {
if( element.addEventListener ){
element.addEventListener(type,fn);
}else if( element.attachEvent ){
element.attachEvent("on"+type,fn);
}else{
element["on"+type] = fn;
}
}
myEventListener(btn,'click',function () {
alert("兼容版的事件注册方式");
});
</script>
2.解绑事件的兼容方式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload = function () {
/**
* 一、事件三要素
* 事件源
* 事件类型
* 事件处理程序
*
*
* 二、注册事件三种方式
* 第一种:
* 事件源.on事件类型 = 事件处理程序
* 第二种: ie8不支持
* 事件源.addEventListener('事件类型',事件处理程序,false)
* 第三种: chrome不支持
* 事件源.attachEvent('on事件类型',事件处理程序)
*
*
* 三、事件解绑
* 第一种:
* 事件源.on事件类型 = null
* 第二种: ie8不支持
* 事件源.removeEventListener('事件类型',事件处理程序,false)
* 第三种: chrome不支持
* 事件源.detachEvent('on事件类型',事件处理程序)
*
*
* */
var btn = document.getElementById('btn');
var btn2 = document.getElementById('btn2');
// 事件注册兼容方式
function myEventListener(element,type,fn) {
// 主流浏览器注册方式
if( element.addEventListener ){
element.addEventListener(type,fn,false);
//
}else if( element.attachEvent ){
element.attachEvent("on"+type,fn);
}else{
element["on"+type] = fn;
}
}// 事件解绑兼容方式
function myRemoveEventListener(element,type,fn) {
if( element.removeEventListener ){
element.removeEventListener(type,fn,false);
}else if( element.detachEvent ){
element.detachEvent("on"+type,fn);
}else{
element["on"+type] = null;
}
} function fn() {
alert("兼容版的事件注册方式");
}
myEventListener(btn,'click',fn);
// 独立fn是为了浏览器能区分每个事件注册
btn2.onclick = function () {
myRemoveEventListener(btn,'click',fn);
} console.log( btn.addEventListener );
console.log( btn.attachEvent ); }
</script>
</head>
<body>
<button id="btn">按钮</button>
<button id="btn2">解绑事件</button>
</body>
</html>
3.阻止事件传播(冒泡)兼容
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#yeye{
width: 500px;
height: 500px;
background-color: #f24b4b;
}
#baba{
width: 400px;
height: 400px;
background-color: #44c28d;
}
#erzi{
width: 300px;
height: 300px;
background-color: #6e8cd5;
}
</style>
<script>
window.onload = function () { /**
*
*
* 事件捕获:
* 浏览器就好像盲人一样,要找某个元素,其实挨个挨个问的方式去找
* 这个过程我们叫事件的捕获过程.
* // 从外到里,直到找到目标
*
* 事件冒泡:
* 找到到目标后,其实还有一个回馈的过程,逐级往上传播
* 这个过程我们叫事件的冒泡过程.
* // 从里到外,直到传到window
*
* 注意:
* 我们一般都是事件冒泡的方式注册事件的
*
*
* 事件的三个阶段 1. 捕获阶段
2. 当前目标阶段
3. 冒泡阶段
事件对象.eventPhase属性可以查看事件触发时所处的阶段 *
* */ var yeye = document.getElementById("yeye");
var baba = document.getElementById("baba");
var erzi = document.getElementById("erzi"); erzi.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("儿子", event);
}
baba.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("爸爸", event);
}
yeye.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("爷爷", event);
}
}
</script>
</head>
<body>
<div id="yeye">
<div id="baba">
<div id="erzi"></div>
</div>
</div>
</body>
</html>
五.event事件对象兼容问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
*
* 事件对象兼容写法:
* event IE不兼容 window.event火狐(Firefox 不支持)
* event = event || window.event;
*
* 事件目标元素兼容写法:
* event.target IE9.0版本才开始支持
* event.srcElement 火狐(Firefox 不支持)
* event.target = event.target || event.srcElement;
*
*
* */ window.onload = function () {
var btn = document.getElementById('btn');
btn.onclick = function (event) {
// console.log(event);
// console.log(window.event);
event = event || window.event; // 短路写法
event.target = event.target || event.srcElement; // 短路写法
// event.target
console.log( event.target );
console.log( event.srcElement );
} }
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>
六.兼容ie8的获取样式函数
注意点
// window.getComputedStyle(box,null) -- box 是目标标签
// 这种写法是获取到计算完成的样式,所以这种写法能获取到各种样式表
// 甚至可以获取到继承过来的属性和默认样式
console.log(boxStyle);
console.log(boxStyle.width);
console.log(boxStyle["width"]);
console.log(boxStyle['padding-left']);
console.log(boxStyle['paddingLeft']); // 推荐驼峰写法
console.log(box.style.width);*/ //兼容IE6~8
// console.log(box.currentStyle); // if(window.getComputedStyle) {
// var boxStyle = window.getComputedStyle(box,null);
// }else if(box.currentStyle){
// var boxStyle = box.currentStyle;
// }
// console.log(boxStryle);
封装函数
/**
* 获取样式函数
* @param element 要获取的样式的对象
* return 目标css样式对象
* */
function getStyle(element) {
if(window.getComputedStyle) {
return window.getComputedStyle(element,null);
}else if(element.currentStyle){
return element.currentStyle;
}
}
应用例子--缓动动画函数:
/**
* 获取样式函数
* @param element 要获取的样式的对象
* return 目标css样式对象
* */
function getStyle(element) {
if(window.getComputedStyle) {
return window.getComputedStyle(element,null);
}else if(element.currentStyle){
return element.currentStyle;
}
} /**
* 动画函数
* @param element html标签
* @param attr 标签属性
* @param target 目标参数
* */
function animate(element,obj) {
clearInterval(element.timer);
element.timer = setInterval(function () {
var flag = true;
for(var attr in obj){
// 在for in 的内部要区别开到底是透明度还是像素px的变化
if( attr == "opacity") {
var current = getStyle(element)[attr];
var target = obj[attr];
current = current * 100;
target = target * 100;
// Math.round() 函数返回一个数字四舍五入后最接近的整数值。
current = Math.round(current);
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current / 100;
}else if(attr == "zIndex"){
element.style[attr] = obj[attr];
} else{
var current = parseInt(getStyle(element)[attr]);
var target = obj[attr];
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current+ "px";
}
}
if(flag) {
clearInterval(element.timer);
}
},40);
}
七.pageX、pageY还有event、clientX、clientY等兼容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.box {
width: 200px;
height: 200px;
background-color: pink;
margin-top:1000px;
margin-left:100px;
margin-bottom:100px;
position: absolute;
/*left: 100px;*/ }
.txt {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box" id="box">
width: 200px<br>
height: 200px<br>
background-color: pink<br>
margin-top:1000px<br>
margin-left:100px<br>
margin-bottom:100px<br>
<h2 class="txt" id="txt" ></h2>
</div> </body>
</html>
<script>
/*封装event*/
var eventTool = {
getEvent : function (event) {
return event || window.event;
}, getClienX: function (event) {
return this.getEvent(event).clientX;
},
getClienY: function (event) {
return this.getEvent(event).clientY;
},
getPageY : function () {
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
return (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0) + this.getClienY(event);
}, getPageX : function () {
// pageX = 页面滚动出去横向距离 + 事件在当前视口的距离
return (window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0) + this.getClienX(event);
} }
var box = document.getElementById('box');
var txt = document.getElementById('txt');
box.onclick = function (event) {
// ie8下event兼容
// var event = eventTool.getEvent(event);
// console.log(event);
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
// console.log(window.pageYOffset + event.clientY);
// console.log(window.pageYOffset);
// console.log(event.pageY); console.log(eventTool.getPageY(event));
txt.innerHTML = eventTool.getPageX(event);
// txt.innerHTML += eventTool.getClienY(event);
// txt.innerHTML = "pageX:"+event.pageX+"<br> pageY:"+event.pageY; // 获取window滚动条滚动的距离window.pageYOffset/scrollY的别名 window.pageXOffset/ scrollX的别名 }
</script>
封装写法
eventTool.js
/*封装eventTool*/
var eventTool = {
getEvent : function (event) {
return event || window.event;
}, getClienX: function (event) {
return this.getEvent(event).clientX;
},
getClienY: function (event) {
return this.getEvent(event).clientY;
},
getPageY : function () {
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
return (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0) + this.getClienY(event);
}, getPageX : function () {
// pageX = 页面滚动出去横向距离 + 事件在当前视口的距离
return (window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0) + this.getClienX(event);
} }
封装方法2:
my.js
function $(id) {return document.getElementById(id);}
function show(obj) { obj.style.display = "block";}
function hide(obj) { obj.style.display = "none";}
function scroll() {
if(window.pageYOffset != null) // ie9+ 和其他浏览器
{
return {
left: window.pageXOffset,
top: window.pageYOffset
}
}
else if(document.compatMode == "CSS1Compat") // 声明的了 DTD
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
{
return {
left: document.documentElement.scrollLeft,
top: document.documentElement.scrollTop
}
}
return { // 剩下的肯定是怪异模式的
left: document.body.scrollLeft,
top: document.body.scrollTop
}
}
使用例子--返回顶部小火箭:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
width: 2000px;
}
.top{
position: fixed;
right: 50px;
bottom: 100px;
display: none;
} </style>
<script src="my.js"></script>
<script>
window.onload = function () {
var goTop = $("gotop");
window.onscroll = function () {
scroll().top > 0 ?show(goTop) : hide(goTop);
leader = scroll().top; // 把减去的头部给起始位置
console.log(scroll().top);
} var leader = 0,target = 0 ,timer = null;
goTop.onclick = function () {
target = 0;
timer = setInterval(function () {
leader = leader + (target - leader) / 10;
window.scrollTo(0,leader); // 去往页面的某个位置
if(leader == target) {
clearInterval(timer);
}
},20);
}
}
</script>
</head>
<body>
<div id="gotop" class="top">
<img src="data:images/Top.jpg" alt="">
</div>
<p>我是顶部</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是底部</p>
</body>
</html>
目前暂时那么多,遇到就更新!
JavaScript--兼容问题总结的更多相关文章
- JavaScript 兼容各大浏览器阻止冒泡事件
JavaScript 兼容各大浏览器阻止冒泡事件 function stopEvent(event) { //阻止冒泡事件 //取消事件冒泡 var e = arguments.callee.call ...
- Javascript兼容和CSS兼容总结
javascript部分 1. document.form.item 问题问题:代码中存在 document.formName.item(“itemName”) 这样的语句,不能在FF下运行解决方法: ...
- JavaScript 兼容处理IE67之 !"a"[0]
IE67对字符串进行取值需要使用charAt()方法,不能直接通过数组方式的坐标访问: <!DOCTYPE html> <html> <head> <meta ...
- JavaScript 兼容 Array.prototype.slice.call
IE9之前的IE版本的HTMLCollection以及NodeList不是Object的子类. 在通过Array.prototype.slice.call进行数组化的时候,IE9之前的IE版本会抛出异 ...
- ie7下的javascript兼容
<a href="javascript:;" onclick="functionone();"></a> <script> ...
- Front End中Javascript兼容问题收集(转)
1 select标签,就有诸多不兼容: A. cloneNode方法,对于非IE浏览器没有问题,对于IE浏览器, 遇到的问题包括: 1)option selected的会clone不过去,然后 ...
- javascript 兼容各个浏览器的事件
- Javascript兼容各浏览器的日期转换
var date = new Date(Date.parse("2015-09-05".replace(/-/g,"/")));'2015-09-05'是无法被 ...
- web前端 javascript 兼容低版本 IE 6 7 8复合写法
1. 返回检测屏幕宽度(可视区域) function client() { if(window.innerWidth != null) // ie9 + 最新浏览器 { return { width: ...
- 【JavaScript兼容】关于IE8及以下无法通过getElementsByClassName()方法获得元素的解决方法
try{ var a = document.getElementsByClassName("cla"); console.log(a); }catch(ex){ var array ...
随机推荐
- win10x软件字体有阴影很模糊的解决方法(软件分辨率与系统分辨率不一致)
devC++,百度网盘等软件都有这种情况 拿百度网盘举例:界面比较大,不能缩小,字体有阴影比较模糊 解决方法: 桌面右击百度网盘,选择属性, 点击兼容性,更改高DPI设置,替代高DPI缩放行为前面打上 ...
- RxJS 入门指引和初步应用
作者:徐飞链接:https://zhuanlan.zhihu.com/p/25383159来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. RxJS是一个强大的React ...
- ajax返回后台编译时都对,返回error
首先看看你的dataType:‘json’ 类型是否与后台获取的类型一直.特别是json的格式对不对. 第二: 红括号里的有没有加
- fft模板 HDU 1402
// fft模板 HDU 1402 #include <iostream> #include <cstdio> #include <cstdlib> #includ ...
- Luogu P1278 单词游戏(dfs)
P1278 单词游戏 题意 题目描述 \(Io\)和\(Ao\)在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何 ...
- js校验文本框只能输入数字(包括小数)
form表单 <form method="POST" action=""> <input type="text" id=& ...
- spring源码学习之bean的加载(二)
这是接着上篇继续写bean的加载过程,好像是有点太多了,因为bean的加载过程是很复杂的,要处理的情况有很多,继续... 7.创建bean 常规的bean的创建时通过doCreateBean方法来实现 ...
- JavaScript的基础应用
<!DOCTYPE html> <!--JavaScript基础1--> <html lang="en"> <head> <m ...
- iBaties对比hibernate
翻译至一篇2008年的文章(http://www.javaworld.com/article/2077875/open-source-tools/ibatis--hibernate--and-jpa- ...
- java-Map-system
一 概述 0--星期日1--星期一... 有对应关系,对应关系的一方是有序的数字,可以将数字作为角标. public String getWeek(int num){ if(num<0 || n ...