72、按鈕控制選項卡,加左右按鈕實現
<style>
#box div{
width: 200px;
height: 100px;
border: 1px solid #000000;
display:none;
}
#box .on{
background: red;
}
</style>
<script>
window.onload = function(){
var oBox = document.getElementById('box');
var aBtn = oBox.getElementsByTagName('input');
var aDiv = oBox.getElementsByTagName('div');
var oPrev = document.getElementById('prev');
var oNext = document.getElementById('next');
var iNow = 0;
for(var i = 0; i<aBtn.length;i++){
aBtn[i].index = i;
aBtn[i].onclick = function(){
iNow = this.index;
tab();
};
}
function tab(){
for(var i = 0; i< aBtn.length; i++){
aBtn[i].className = '';
aDiv[i].style.display = 'none';
}
aBtn[iNow].className = 'on';
aDiv[iNow].style.display = 'block';
}
//前一個
oPrev.onclick = function(){
iNow--;
if (iNow < 0){
iNow = aBtn.length - 1;
}
tab();
};
//后一個
oNext.onclick = function(){
iNow++;
if (iNow >= aBtn.length){
iNow = 0;
}
tab();
};
};
</script>
</head>
<body>
<div id="box">
<a href="javascript:;" id="prev">?</a>
<input type="button" class="on" value="體育">
<input type="button" value="娛樂">
<input type="button" value="新聞">
<input type="button" value="新聞2">
<a href="javascript:;" id="next">→</a>
<div style="display:block;">1111111111</div>
<div>1122111111</div>
<div>222222222222</div>
<div>333333333333333333333333</div>
</div>
</body>
73、自動播放選項卡,定時運行按鈕選項卡中的next
<style>
#box div{
width: 200px;
height: 100px;
border: 1px solid #000000;
display:none;
}
#box .on{
background: red;
}
</style>
<script>
window.onload = function(){
var oBox = document.getElementById('box');
var aBtn = oBox.getElementsByTagName('input');
var aDiv = oBox.getElementsByTagName('div');
var iNow = 0;
for(var i = 0; i<aBtn.length;i++){
aBtn[i].index = i;
aBtn[i].onclick = function(){
iNow = this.index;
tab();
};
}
function tab(){
for(var i = 0; i< aBtn.length; i++){
aBtn[i].className = '';
aDiv[i].style.display = 'none';
}
aBtn[iNow].className = 'on';
aDiv[iNow].style.display = 'block';
}
//后一個
function next(){
iNow++;
if (iNow >= aBtn.length){
iNow = 0;
}
tab();
};
setInterval(next,2000)
};
</script>
</head>
<body>
<div id="box">
<input type="button" class="on" value="體育">
<input type="button" value="娛樂">
<input type="button" value="新聞">
<input type="button" value="新聞2">
<div style="display:block;">1111111111</div>
<div>1122111111</div>
<div>222222222222</div>
<div>333333333333333333333333</div>
</div>
</body>
74、延時選項卡(京東):onmouseover,setTimeout定時器里的this壞了-- _this=this;
<style>
#box div{
width: 200px;
height: 100px;
border: 1px solid #000000;
display:none;
}
#box .on{
background: red;
}
</style>
<script>
window.onload = function(){
var oBox = document.getElementById('box');
var aBtn = oBox.getElementsByTagName('input');
var aDiv = oBox.getElementsByTagName('div');
var timer;
for(var i = 0; i<aBtn.length;i++){
aBtn[i].index = i;
aBtn[i].onmouseover = function(){
var _this = this;
timer = setTimeout(function(){
for(var i = 0; i< aBtn.length; i++){
aBtn[i].className = '';
aDiv[i].style.display = 'none';
}
_this.className = 'on';
aDiv[_this.index].style.display = 'block';
},200);
};
aBtn[i].onmouseout = function(){
clearTimeout(timer);
};
}
};
</script>
</head>
<body>
<div id="box">
<input type="button" class="on" value="體育">
<input type="button" value="娛樂">
<input type="button" value="新聞">
<div style="display:block;">1111111111</div>
<div>222222222222</div>
<div>333333333333333333333333</div>
</div>
</body>
75、QQ頭像 事件連等 76、封閉空間: (function(){alert(1);})(); 用途:1)解決變量沖突 (小紅和你同時用 oBtn) 2)循環里面加定時器,定時器里的i也不能用了--封閉空間解決 77、arguments:實參數組 78、with(重復代碼){} 79、cssText:設置樣式,兼容性沒問題,沒什么必要使用
80、字符串:
取某一個 str.charAt()
#str.indexOf(小字符串);
<script>
var str = 'abcdefdsfd';
//alert(str.indexOf('e')); // 4
//alert(str.indexOf('cde')); //2
//alert(str.indexOf('d')); //3
//alert(str.indexOf('x')); //-1
alert(str.indexOf('D'));
</script>
#瀏覽器判斷 UA:navigator.userAgent
Chrome Firefox MSIE
擴展:IE11不再包含MSIE,判斷方法:(sUA.toLowerCase().indexOf("trident") > -1 && sUA.indexOf("rv") > -1);
<script>
if (navigator.userAgent.indexOf('Chrome') != -1){
alert('這里是chrome');
}else if(navigator.userAgent.indexOf('Firefox') != -1){
alert('這里是火狐');
}else if(navigator.userAgent.indexOf('MSIE') != -1){
alert('這里是ie');
}
//alert(typeof navigator.userAgent);
</script>
#str.lastIndexOf(小字符串);
#str.substring(開始位置,結束位置); //結束位置不包含想要的最后那個
str.substring(開始位置); //截取到最后
<script>
var str = 'width';
//alert(str.substring(1,3));//id
alert(str.substring(1)); //idth
<script>
#str.split(切的方式); //切成了數組
split(''); //切碎
<script>
/*var str = 'welcome-to-beijing';
alert(str.split('-')[1]);*/
var str = 'welcome to beijing';
//alert(str.split(' '));
alert(str.split(''));
<script>
str.toUpperCase(); //轉大寫
str.toLowerCase(); //轉小寫
#字符串比較:
1)英文單詞 字典序
2)數字(字符串) 字典序
3)數字,數字(字符串) 先轉為數字,再比較
4)漢字,沒規律, unicode編碼 0x4e00 到 0x9fa5
81、數組
var arr = [1,2,3];
var arr = new Array(1,2,3);
var arr = new Array(3); //表示長度是3,并不是只有一個元素是3
var arr = [3]; //表示只有一個元素是3
#函數:
arr.push(元素); //加到后面
arr.unshift(元素); //加到前面
arr.pop(); //刪除后面
arr.shift(); //刪除前面
#arr.splice(開始位置,刪除幾個[,元素1,元素2...]);// 萬能方法,靈活使用,
#可實現各操作
刪除:var arr = [2,3,8,9,10,22];
arr.splice(2,1); //從第2個位置開始,刪除1個
增加:arr.splice(3,0,100); //2,3,8,100,9,10,22
arr.splice(3,0,100,200); //2,3,8,100,200,9,10,22
替換:arr.splice(3,2,55,66); // 2,3,8,55,66,22
#模擬:
增加:push---arr.splice(arr.length,0,數1);
unshift---arr.splice(0,0,數1,數2);
刪除:pop---arr.splice(arr.length-1,1);
shift---arr.splice(0,1);
#arr.join(連接方式); //數組轉字符串
#arr.concat(數組1,數組2...); //數組連接
#arr.reverse(); //數組反轉
#arr.sort(); //排序 默認字典序
#排序數字時需要自己實現:
arr.sort(function(n1,n2){
return n1-n2;
});
數組長度: arr.length --還能賦值
#清空數組:
1) arr.length = 0;
2) arr = [];
3) arr.splice(0,arr1.length);
4)while(arr1.length){arr1.pop()}
82、JSON:
json是什么?
給變量打個包,存儲多個東西
json={name: value, name2: value2, name3: value3,......};
json 數組
下標 字符串 數字
length undefined 有length
for for in循環 普通for循環
有序 無序 有序
#83、 json添加一項:
json.x=xx;
json刪除一項:
delete json.x
#84、另一種循環:for in循環:循環json對象
<script>
var json = {a:1,c:100,d:'100px',ff:[1,3,9,20]};
//alert(json.ff);
/*for(var i = 0;i < json.ff.length; i++){
alert(json.ff[i]);
}
*/
for(var name in json){
if (name == 'ff'){
for(var i = 0;i < json[name].length; i++){
alert(json[name][i]);
}
}
}
</script>
普通循環:for while
* 能用for循環盡量用for循環,實在沒辦法采用for in
#85、 json的寫法:
a). json={a:1};
b). json={"a":1}; √
c). json={'a':"張三"}; √
#86、題
json = {a:1,b:2};
json['a']++;
console.log(json); //{a:2,b:2}
#87、json中什么都可以存,比如,描述 小明 的特點及親戚
#88、用json的方法完善 setStyle:
function setStyle(){
var obj = arguments[0];
if (arguments.length == 3){...
else if(arguments.length == 2){...
#89、getByClass(完美版)
document.getElementsByClassName(類名); --兼容高級瀏覽器
oParent.getElementsByTagName('*');--獲取oParent下的所有標簽
完美版:
function getByClass(oParent,sClass){
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(sClass);
}else{
var aEle=oParent.getElementsByTagName('*');
// 用來裝滿足條件的元素
var arr=[];
for(var i=0; i<aEle.length; i++){
var aClass=aEle[i].className.split(' ');
if(findInArr(aClass, sClass)){
arr.push(aEle[i]);
}
}
return arr;
}
90、select的使用
onchange --變化時的事件
oSle.value --獲取選中項的值
<option selected... --默認選中項設置屬性
當前選中的索引值:
oS.selectedIndex
獲取所有option:
aO = oS.getElementsByTagName('option');
oS.options;
選中項的文本:
a). aO[oS.selectedIndex].innerHTML
b). aO[oS.selectedIndex].text
動態添加一個option:
創建:new Option(文本, value);
添加:oS.options.add(option);
刪除:oS.options.remove(索引);
91、Math:
Math.random(); 隨機數
Math.abs(); 絕對值
Math.max(); 最大值
Math.min(); 最小子值
Math.pow(n,m); n的m次方
Math.sqrt(); 開平方
Math.ceil(); 向上取整
Math.floor(); 向下取整
Math.round(); 四舍五入
92、eval深入: eval(json)的時候出問題了 eval('('+json+')');
93、刪除數組中的偶數
<script>
var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
for(var i = 0; i < arr.length; i++){
if(arr[i] % 2 == 0){
//偶數
arr.splice(i,1);
i--;
}
}
alert(arr);
</script>
94、統計字符串中出現次數最多的字母
<script>
var str = 'aabbcdefggggggggggggggggggggggggggssssssssssssssssssssss';
var json = {};
/*
json = {};
a json['a'] = 1;
a json['a']++; json['a']=2
b json['b'] =1;
json -- {'a':1,'b':2,s:100}
*/
for(var i = 0 ;i < str.length; i++){
/*alert(str.charAt(i));*/
if(json[str.charAt(i)]){
json[str.charAt(i)]++;
}else{
json[str.charAt(i)] = 1;
}
}
//console.log(json);
var aaa = '';
var iCount = 0;
for(var name in json){
//name a b ... s
//json[name] 2 2 1 1 ....21 22
if (json[name] > iCount){
aaa = name;
iCount = json[name];
}
}
document.write('出現最多次數的字母是:'+aaa+',出現了'+iCount+'次');
</script>
95、復選框聯動全選
<script>
window.onload = function(){
var oChkAll = document.getElementById('ckbAll');
var oDiv2 = document.getElementById('div2');
var aChk = oDiv2.getElementsByTagName('input');
var iCount = 0; //當前選中了幾個
//全選,點上面
oChkAll.onclick = function(){
if (oChkAll.checked == true){
for(var i = 0;i < aChk.length;i++){
aChk[i].checked = true;
}
iCount = aChk.length;
}else{
for(var i = 0;i < aChk.length;i++){
aChk[i].checked = false;
}
iCount = 0;
}
document.title = iCount;
};
//下面
for(var i = 0;i<aChk.length;i++){
aChk[i].onclick = function(){
if(this.checked == true){
iCount++;
}
else{
iCount--;
}
if (iCount >= aChk.length){
oChkAll.checked = true;
}else{
oChkAll.checked = false;
}
document.title = iCount;
};
}
};
</script>
<body>
<div id="div1">
<input type="checkbox" name="" id="ckbAll">
</div>
<hr>
<div id="div2">
<input type="checkbox" name="" id=""><br>
<input type="checkbox" name="" id=""><br>
<input type="checkbox" name="" id=""><br>
<input type="checkbox" name="" id=""><br>
<input type="checkbox" name="" id=""><br>
<input type="checkbox" name="" id=""><br>
</div>
</body>
96、數組去重三種辦法:
1)用findInArray,把結果放到新數組
<script>
function findInArray(arr,n){
for(var i = 0; i < arr.length; i++){
if (n == arr[i])
{
return true;
}
}
return false;
}
var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
var arr2 = [];
for(var i = 0; i < arr.length; i++){
if (!findInArray(arr2,arr[i])){
arr2.push(arr[i]);
}
}
alert(arr2);
</script>
#2)和下一項比,如果重復就splice刪除,i--
<script>
//去重方法2
function findInArray(arr,n){
for(var i = 0; i < arr.length; i++){
if (n == arr[i])
{
return true;
}
}
return false;
}
var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
for(var i = 0; i < arr.length; i++){
if (findInArray(arr,arr[i])){
console.log(i + '-----' + arr);
arr.splice(i,1);
i--;
}
}
alert(arr);
</script>
3)利用json的name不重復的特性
<script>
//去重方法3
var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
var json = {}; //{'1':sss,'2':ssfd,'3':sss,'8':fdfd}
for(var i = 0; i< arr.length; i++){
if(!json[arr[i]]){
json[arr[i]] = 'zns';
}
}
//console.log(json);
var arr2 =[];
for(var name in json){
//name 1 2 3 8..
//json[name] zns
arr2.push(name);
}
alert(arr2);
</script>
97、自己實現排序 (選擇排序)
98、JS特性-預解析
JS特性-預解析:預先解析一些東西|--變量定義、函數定義 會預解析
先alert再var->-uncefined而不是報錯
預解析的作用范圍:會找本作用域之之內, --函數,script
題1:
var a = 12;
if (a%2){
function show(){alert('奇數');}
}else{
function show(){alert('偶數');}
}
show();
題2:
function show(){
alert(a);
return;
var a = 123;
}
show();
#99、引用
和對象打交道的 : oDate,oDiv,json,arr...
對象之間有才是引用的
指的是同一個東西(多人一個柜子)
基本類型不是引用
#100、字符編碼
str.charAt(1);
str.charCodeAt(索引); -> 字母對應的編碼
漢字在計算機中都有編碼,范圍是 0x4e00-0x9fa5
已知編碼,變成對應的字-- String.fromCharCode('0x4e00');
統一編碼:unicode包含 utf-8/16 和 gb2312
表示方法: \u
比如: 一 \u4e00
#101、in:
var json = {a:1,b:2};
alert(json.a); //是對的,說明 a 在json里面
全局的東西,默認都在window里
#102、異常
異常捕獲:try{} cache(e){}
#103、定義變量,但是沒有使用var,就變成全局的了
var a= b=c=d=1; //連等導致b c d 全局
#104、逗號表達式 逗號運算符,只看最右面,優先級最低
題1:
if(1,0,true,undefined){alert(1);}
else{alert(2);}
題2:
for(var i =0,j=0,k=1;i<10,j<5,k<3;i++,j++,k++){}
alert(i+j+k);
#105、賦值表達式,值是賦值后的結果
106、嚴格模式 'use strict'
a、定義變量必須加 var
b、不允許在(if,for)等語句里定義函數了
c、干掉了 with
嚴格模式的作用范圍:
1、沖不出script標簽
2、可以作用到函數內部(寫到函數里)
3、放到整個js文件,開頭
建議:以后大家每個js文件的開頭,都要加上 'use strict'
預解析跟嚴格模式沒有關系,嚴格模式并沒有把預解析干掉
107、JS組成部分:
ECMA: ECMAScript,解釋器,解析語法、詞法
var, if(){} , while(){}
arr.push arr.reverse()....第一部分學的知識
兼容性:完全兼容 現在所學的是穩定版本4,
DOM
Document Object Model 文檔對象模型
就是跟頁面打交道
比如,獲取元素,設置樣式。。。。等和頁面有關的
兼容性: 一般還行吧。 大部分都兼容,少部分不太兼容,也可以去處理
document.getElementsByClassName();
BOM
Browser Object Model 瀏覽器對象模型
就是跟瀏覽器打交道
navigator.userAgent
alert();//在不同的瀏覽器下長得不一樣,但沒辦法改
兼容性:大部分都不兼容,不兼容的地方沒辦法處理
108、DOM
#1)子級:一級(一層) 父級.children
children不包含文本節點
#2)父級: obj.parentNode
#3)兄弟元素
下一個兄弟: var oNext=obj.nextElementSibling || obj.nextSibling;
obj.nextElementSibling || obj.nextSibling 不能換位置
上一個兄弟:var oPrev=obj.previousElementSibling || obj.previousSibling;
首節點: var firstLi=obj.firstElementChild || obj.firstChild; 或 父級.children[0]
尾節點: var lastLi=obj.lastElementChild || obj.lastChild; 或 父級.children[父級.children.length-1]
#109、創建元素: var obj=document.createElement('標簽名');
#110、添加元素:父級.appendChild(obj); //剪切
插入到父級的最后
父級.insertBefore(obj, 誰之前); //剪切
#111、刪除元素:
父級.removeChild(obj);
112、簡易留言板:添加留言,隱藏,刪除,每次往前面加
<style>
div{
width: 100%;
height: 30px;
background: red;
margin: 5px;
float:left;
}
</style>
<script>
window.onload = function(){
var oBtn = document.getElementById('btn1');
var oUL = document.getElementById('ul1');
var oT = document.getElementById('txt1');
oBtn.onclick = function(){
//創建li,并加到ul里
var oLI = document.createElement('li');
oLI.innerHTML = oT.value + '<a href="javascript:;">刪除</a>';
//oUL.appendChild(oLI);
var oFirst = oUL.firstElementChild || oUL.firstChild;
oUL.insertBefore(oLI,oFirst);
//實現隱藏功能
var oLink = oLI.children[0];
oLink.onclick = function(){
//this.parentNode.style.display = 'none';
oUL.removeChild(oLI);
};
//清空文本框
oT.value = '';
};
};
</script>
</head>
<body>
留言內容:<input type="text" id="txt1">
<input type="button" value="留言" id="btn1">
<ul id="ul1">
</ul>
</body>
114、BOM
window.open(地址, 方式);
方式:默認是新頁面打開
_blank:新頁面打開
_self:當前頁面打開
* 只要是用戶打開的(觸發事件),都不攔截
window.open(); 有返回值->新頁面的window對象
115、window.close();
* 可以關閉自己open出來的頁面
116、類似于在線運行代碼:
var win=window.open(); 返回值 -> 新頁面的window對象
win.document.write(oT.value);
117、地址欄信息:
window.location:可以讀取,可以賦值
window.location.href:地址
window.location.search:數據
window.location.hash:錨
其他信息:
window.location.protocol:協議
window.location.host:地址
window.location.hostname:域名
window.location.port:端口號
window.location.pathname:路徑
118、歷史記錄:
window.history
window.history.forward(); 前進
window.history.back(); 后退
window.history.go(數字);
window.history.go(-1); 后退
windiw.history.go(1); 前進
119、右下角懸浮框
滾動條滾動縱向的距離:var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
滾動條滾動的橫向距離:var scrollLeft=document.documentElement.scrllLeft || document.body.scrllLeft;
幾個事件:
window.onload:當頁面加載完成
window.onscroll:當滾動條滾動的時候
window.onresize:當頁面縮放的時候
可視區寬度:document.documentElement.clientWidth;
可視區高度: document.documentElement.clientHeight;
物體寬度:obj.offsetWidth
物體高度:obj.offsetHeight