Javascript
// 執行環境:// 全局執行環境:// 1.在一個頁面中,第一次載入JS代碼時創建一個全局執行環境,// 全局執行環境是最外圍的執行環境,在Web瀏覽器中,全局執行環境被認爲是window對象。// 2.全局執行環境直到應用程序退出,也就是說關閉網頁或瀏覽器時纔會被銷燬// 3.因此,所有的全局變量和函數都是作爲window對象的屬性和方法創建的.// 全局變量被視爲window對象的屬性,全局函數被視爲window對象的方法
// 函數執行環境(局部執行環境)// 1.每個函數都有自己的執行環境,稱爲局部執行環境,// 2.函數執行時會創建函數的執行環境// 3.當執行環境中的代碼被執行完畢後,該環境會被銷燬,// 保存在其中所有的變量與函數也隨之銷燬.因此在函數裏定義的函數和變量都是局部的
// 作用域// 作用域鏈:當代碼在一個環境中執行時,就會形成一種叫做作用域鏈的東西,// 它的用途是保證對執行環境中有訪問權限的變量和函數進行有序訪問
// 變量查詢:在變量查詢過程中,首先在當前作用域內查找相關變量,沒有的話繼續沿着作用域鏈向上搜索在變量查詢中,// 訪問局部變量要比全局變量更快,因爲不需要向上搜索作用域鏈,由近及遠;
// 建議都使用var關鍵字聲明變量
// 棧結構:先進後出,後進先出(數組的方法:push()壓入,pop()彈出)
// 環境棧:每個函數被調用時都會創建自己的執行環境,當執行到這個函數時,函數的執行環境會被推到環境棧中去執行,而執行後又在環境棧中彈出(退出,當前執行環境銷燬,把控制權交給上一級的執行環境,);
prompt("一隻小羊駝"); //1.prompt()用戶可輸入彈出框;
alert('兩隻小羊駝'); //2.alert()彈出框,用戶不可操作;
confirm("三隻小羊駝"); //3.confirm()彈出框,經常和判斷語句一起使用;
var a = '小明';
console.log(a); //2.控制檯打印指令,最常用;
document.write('三隻小羊駝'); //3.直接文本輸出頁面;
var isNumber = isNaN(NaN); //判斷對象是否非數字,正確返回true;
console.log(obj1 instanceof Object);//檢測是否是某一個類型,布爾值true/false;
var string = '小明'; //字符串類型
var number = 10.8; //數字類型;
var isman = true; //布爾類型,判斷true/false;
var a; //undefind,定義未賦值;
var b = null; //空類型;
var c = ['a',1,'c',3] //數組類型;
var j = 100/0; //正負無窮Infinity
var k = -100/0;
console.log(k);
var a1 = 'a'/32; //NAN形式
console.log(a1);
var text = "你\"我\""; //轉義序列
console.log(text);
\n // 空格符
//js變量的聲明:
//1.先聲明,再賦值:
var name;
name="小明";
//2.聲明,賦值同時進行:
var name1 = '小紅';
//3.同時聲明多個變量;
var age = 18,height = 175;
//4.只聲明,不賦值;
var a = 'null';
// 基礎創建函數,function:
// 1.一個函數,代碼塊,定義函數;
function a() {
console. log('我就看一下');
}
a();
// 2.帶參數的函數,傳參;
function b(name,age) {
console. log('hello'+name+',');
console.log('今年'+age+'.');
}
b('小明',18);
// 3.有返回值的函數,return;
function c(name) {
return('hello'+name+'.');
}
var a1 = c('小紅');
// 4.匿名函數,匿名函數格式:
(function (c,d) {
var add1 = c+d;
})(10,10);
// 計算1-100的和:
(function () {
var ad =1;
for(var i=0;i<=100;i++) {
ad = ad+i;
}
console. log(ad);
})();
// 案例2
var st = 81;
var arr = ['beijing','beijing','beijing'];
var set = function (num,arr1) {
num =1;
arr[1] = 'xiaohong'; //更改數組下標第一項
document.write('數值:'+num+'<br>');
document.write('數組:'+arr[1]+'<br>');
}
set(st,arr);
// 5.遞歸函數在函數內部調用自己,return不管代碼有沒有執行都將結束函數的執行:
function fun1() {
console. log('haha');
//fun1(),在函數內部調用自己;
return; //返回值,結束函數執行;
console.log('hehe'); //return後這一步不會調用;
}
fun1();
// 求一個6的階乘,6*5*4*3*2*1,5*(5-1)*(5-2)*(5-3)*(5-4);
function nex(num1) {
if(num1<=1){
return 1; //如果num1<=1,那就在1返回結束函數;
}else {
return num1*nex(num1-1); //返回值,階乘;
}
}
var num2 = nex(6);
document.write(num2); //6*5*4*3*2*1結果爲720;
// 1.簡單數據類型作爲參數傳遞:
// 聲明全局變量,在程序任何位置都可以訪問:
var n = 123;
function fun1(num) { //參數:形參;
// num作爲函數的參數相當於在函數內定義一個局部變量,只能在函數內部使用,出作用域就被銷燬;
num = 200;
// 在函數內部聲明一個局部變量;
var b = 10;
console.log(b);
// 在函數內部不帶var定義爲全局變量(不建議使用此種方式聲明):
c = 300;
}
fun1(n); //返回值
console.log(c); // 可以獲取到,但會造成內存泄漏;
// 2.引用類型作爲參數傳遞:
// 如果函數內部直接對數組或對象類型進行修改,會直接映像到原對象或數組上;
function fun2(obj) {
obj.name = '小明';
obj.age = 20;
console.log(obj)
}
var obj1 = new Object();
obj1.name = '小紅';
obj1.age = 18;
// 調用函數傳遞obj1作爲參數
fun2(obj1);
console.log(obj1); // 等於把obj的對象複製給了obj1;
// 引用類型作爲參數傳遞:
function fun3(obj) {
// 函數內部對於引用類型進行引用類型進行賦值操作,修改不會被映射到原數組或對象上,相當於在函數內部新創建了對象,進行賦值;
obj = {
name :'小王'
};
console.log(obj);
}
var obj2 = new Object();
obj2.name = 'text';
obj2.age = 155;
// 調用函數傳遞obj2作爲參數
fun3(obj2); // 等於把obj2的值賦值給了fun3;
console.log(obj2);
// 執行環境#################################################################:
// 全局執行環境:
// 1.在一個頁面中,第一次載入JS代碼時創建一個全局執行環境,
// 全局執行環境是最外圍的執行環境,在Web瀏覽器中,全局執行環境被認爲是window對象。
// 2.全局執行環境直到應用程序退出,也就是說關閉網頁或瀏覽器時纔會被銷燬
// 3.因此,所有的全局變量和函數都是作爲window對象的屬性和方法創建的.
// 全局變量被視爲window對象的屬性,全局函數被視爲window對象的方法
// 函數執行環境(局部執行環境)
// 1.每個函數都有自己的執行環境,稱爲局部執行環境,
// 2.函數執行時會創建函數的執行環境
// 3.當執行環境中的代碼被執行完畢後,該環境會被銷燬,
// 保存在其中所有的變量與函數也隨之銷燬.因此在函數裏定義的函數和變量都是局部的
// 1.不帶參數:
var num = 10; // 定義全局變量,在程序任何地方都可以訪問;
function fun1() {
// 使用關鍵字var表示在函數內部聲明局部變量:
var n =200;
console.log(n);
}
fun1();
// 2.帶參數:
var color ='red';
function fun2(colorName) {
// 設置的爲局部變量:
colorName = 'blue';
console.log(colorName);
console.log(color)
}
fun2(color); // 把color傳進fun2中;
// 作用域
// 作用域鏈:當代碼在一個環境中執行時,就會形成一種叫做作用域鏈的東西,
// 它的用途是保證對執行環境中有訪問權限的變量和函數進行有序訪問
//
// 變量查詢:在變量查詢過程中,首先在當前作用域內查找相關變量,沒有的話繼續沿着作用域鏈向上搜索在變量查詢中,
// 訪問局部變量要比全局變量更快,因爲不需要向上搜索作用域鏈
//
// 建議都使用var關鍵字聲明變量
//
// 棧結構:先進後出,後進先出(數組的方法:push()壓入,pop()彈出)
//
// 環境棧:每個函數被調用時都會創建自己的執行環境,當執行到這個函數時,函數的執行環境會被推到環境棧中去執行,而執行後又在環境棧中彈出(退出,當前執行環境銷燬,把控制權交給上一級的執行環境);
// 函數嵌套
var className = '學校';
var h =200;
function fun3() {
var a=100;
function fun4() {
var start =10;
h =100;
console.log(className);
console.log(a);
console.log(start);
}
fun4();
}
fun3();
console.log(className);
console.log(h); // 先訪問局部再訪問全局,2個全局變量局部的優先找到;
// 函數的作用域(局部作用域) {}用來儲存一段代碼,稱之爲代碼塊
function fun1() {
var c =100;
console.log(c);
}
// js中沒有塊級作用域,if(){},for,while{},這些語句中的{}都不視爲對變量的作用域劃分,
// 只是用於設置循環或者條件語句
// js中只有在函數執行環境下,函數作用域纔有作用域劃分;
if(true) {
var a =10;
console.log(a);
}
console.log(a);
for(var i=0;i<10;i++) {
var b =200;
}
console.log(i);
console.log(b);
// 1.變量提升:
// 變量提升(Hoisting),也稱爲預解釋,是JS中的一個重點;
// 變量提升是指在程序執行之前,先檢查當前程序中所有代碼,碰上關鍵字var/function就提前爲其開闢內存空間;
// 而賦值操作要等到具體執行到該代碼時纔會進行賦值操作;
console.log(a); // undefined,預解析由上往下;
var a; // undefined,定義未賦值;
a =10; // 賦值
// console.log(a);
var str ='小明';
function fun2() {
console. log(str);
var str ='局部變量';
console.log(str);
}
fun2();
function fun3() {
fun4();
// 只有使用函數聲明方式創建的函數纔會被提升
function fun4() {
console. log('hello word');
}
}
fun3();
// 2.函數提升,代碼執行之前碰到function關鍵字,同樣開闢內存空間,
// 函數提升指的是將整個函數聲明提到最頂層,在執行之前就開闢內存空間存儲函數聲明
// 使用function關鍵字聲明函數,使用變量名創建函數,使用變量名創建的函數不會被提升
// 但是fun6的變量提升;
// function fun5() {
// // 會被提升;
// }
// fun5();
fun6();
var fun6 = function () {
console. log('函數6');
}
// fun6()
// 內存問題:
// 基於JS的內存管理機制,建議更多的使用局部變量與局部對象來解決內存問題和性能優化;
// 不可避免的使用全局對象時,需要手動的解除對象引用來優化性能;
// 聲明一個全局對象
var obj = new Object();
obj.name = 'txt';
// 添加一系列的屬性方法:
// 完成相應功能後,不需要再使用obj,但是程序運行過程中obj還是佔據內存空間,內存不友好;
console.log(obj);
// 解決方案:
// 就是一旦數據不再有用,那麼將其設置爲null來釋放引用,這方法叫解除引用;
// 使用結束之後設置爲null,結束obj的引用,等待回收;
obj = null;
console.log(obj); // 結果爲null,釋放成功;
// arguments 對象:
function fun(a,b) {
// fun.length存儲的是形參的長度
console.log(fun.length);
// arguments 對象在函數內部;作用:保存函數的實際參數;
console.log(arguments); // 0,1 10,20
console.log(arguments.length);
// 想拿到30和40;
console.log(arguments[1]);
if(fun.length==arguments.length){
console. log(a+b);
}else {
alert('請傳遞正確的參數個數');
}
}
fun(10,20);
// 函數作爲參數傳遞:
function fun1() {
return a+b;
}
function fun3(fn,a,b) {
// 執行傳遞過來的fun1;
var d = fn(a,b);
console.log(d);
}
fun3(fun1,10,20)
//(搜索框案例)
var sousuo = document.getElementById('inp');
var la = document.querySelector('#la');
sousuo.onfocus = function (){ //獲取焦點觸發事件
la.style.display = 'none';
la.style.color = 'gray';
}
sousuo.onblur = function (){ //失去焦點觸發事件
la.style.display = 'inline';
}
案例二:
var ipt = document.querySelector('#one');
// 自動獲取光標:
// ipt.focus();
// 當輸入框激活光標樣式:
ipt.onfocus = function () {
// style,設置樣式;
// 判斷用戶是否是第一次輸入
if(ipt.value=="請輸入..."){
ipt.value = '';
ipt.style.color = 'grey';
}
}
// 當輸入框失去焦點時觸發:
ipt.onblur = function () {
if(ipt.value==''){
ipt.value ='請輸入...';
ipt.style.color='#CCCCCC';
}
}
// 案例三:
var ipt1 = document.querySelector('#ipt1');
var ipt2 = document.querySelector('#ipt2');
ipt1.focus(); //自動獲取焦點;
// 鼠標穿過
ipt2.onmouseover = function () {
this.select();
}
ipt1.onmouseover = function () {
this.select();
}
// (簡單案例div變色)
var d = document.getElementById('d');
var but = document.getElementById('but');
var nex = 0;
but.onclick = function () {
nex ++;
d.style.background = 'yellowgreen';
if (nex % 2 == 0) {
d.style.background = '#6666FF';
}
if (nex % 3 == 0) {
alert("你有毒");
}
}
// 1.String(字符串對象),獲取字符串長度:
// 獲取字符串長度:
var string = 'nimeia';
console.log(string.length);
// 轉換爲大寫:
var string1 = string.toUpperCase();
// 轉換爲小寫:
var string2 = string.toLowerCase();
// 2.Number對象:
var number = 12.345;
// 按指定位數保留,四捨五入:
// var n1 = number.toPrecision(4);
// 按指定保留小數位,會四捨五入:
var n2 = number.toFixed(1);
// 3.日期對象 Date()返回當前時間日期;
// 創建一個日期對象;
var myDate = new Date(); //默認存有當前時間
myDate.getFullYear(); //獲取當前年份;
myDate.getMonth(); //獲取當前月份;
myDate.getDay(); //獲取當前週期;
ms = myDate.getMilliseconds(); //獲取當前時間毫秒(ms);
s = myDate.getSeconds(); //獲取當前時間秒(s),1s=1000ms;
m = myDate.getMinutes(); //獲取當前時間分鐘(m),1m=60s;
h = myDate.getHours(); //獲取當前時間小時(h,1h=60m;
// 時鐘角度運算:
miaozhen.style.transform = "rotate('+s*6+'deg)"; //1s=6度,旋轉角度;
fenzhen.style.transform = "rotate('+s*6+'deg)"; //1s=6度,旋轉角度;
shizhen.style.transform = "rotate('+s*6+'deg)"; //1s=30度,旋轉角度;
//獲取圓周率:
var ar = Math.PI;
console.log(ar);
1*8 的0-7次方 八進制
1*10 的0-9次方 十進制
1*16 的0-f次方 十六進制
//運算符:
//賦值運算符'=';
var add;
add = 1+1;
//算數運算符:小數點正常顯示
var a = 1+1.5; //加法
var b = 5-3; //減法
var c = 1*1.5; //乘法
var d = 10/3; //除法
//複合運算符:
//++ --自增與自減
//++ -- 在前本身先自增或自減1個單位
var e = 1;
var f = ++e;
//++ -- 在後先賦值再自增或自減
var g= 1;
var h= g++;
//運算符連寫 += -= *= /=:
var i = 5;
var j = 4;
j += i; //j=j+i;
//取餘
var k = 3;
var l = 8;
l %= k; //l=l%k;
//字符串運算符,字符串的拼接
var m = '小明';
var n = '小紅';
var o = m+''+n;
//爲字符串類型混合拼接
var p = '1';
var q = '2';
var r = p+q;
//數字,字符串混合拼接,結果爲字符串'11';
var s = '1';
var t = 1;
var u = s+t;
//比較運算符:
var v = 10;
if(v>2) {
console. log('這就對了');
}
if(v<2) {
console. log('這就對了');
}
if(v>=2) {
console. log('這就對了');
}
if(v<=2) {
console. log('這就對了');
}
if(v==2) { //==相等運算符
console.log('這就對了');
}
if(v!=2) { //!=不相等運算符
console.log('這就對了');
}
if(v===2) { //嚴格等於運算符
console.log('這就對了');
}
if(v!==2) { //!==非嚴格等於,數值類型必須相同
console.log('這就對了');
}
//類型轉化:
// 1.判斷變量的類型,typeof():
var n0 = 123;
console.log(typeof(n0));
// 2.將數字類型裝換爲字符串類型:String(),toString()十進制數字兩種方式;
// toString(2),toString(8),toString(16),轉換爲2,8,16進制;
var n1 = 123;
// var n2 = String(n1);
var n2 = n1.toString();
// 3.將字符串類型轉化爲數字類型:
var n3 = "saew";
var n4 = Number(n3);
// 取整parseInt:
var a = 100.03;
var b = parseInt(a);
// 得到一個整數或實數:
var c = parseFloat(a);
//4.將數字轉化爲布爾類型:
var n5 = Boolean();
console.log(typeof(n5),n5);
//取整函數Math對象:
//地板函數(向上,向下取整),Math.ceil(向上取整)/Math.floor(向下取整):
var a = 3.24;
var b = Math.ceil(a); //向上取整,結果爲4;
var c = Math.floor(a); //向下取整,結果爲3;
//返回幾項中的最大值,Math.max():
var a1 = 3.23;
var b1 = 3.01;
var c1 = Math.max(a1,b1);
//獲取0-1之間的隨機數Math.random():
var a2 = Math.ceil(Math.random()*10); //隨機生成0-10之間的數有小數點;
//計算X的Y次方,Math.pow();
var b2 = 2;
var c2 = Math.pow(b2,2); //2的次方,2*2結果爲4;
//四捨五入取整,Math.round();
var a3 = 3.62;
var b3 = Math.round(a3); //小數點5以下捨去,5以上進一位;
//邏輯運算符 &&與 ||或 !非;
var a = 1>2; //true
var b = 2>1; //false
// &&兩者爲真,結果爲真 一個爲假,結果爲假
if (a&&b) {
console. log('這是對的');
}
// ||兩者爲假,結果爲真 一個爲真,結果爲假
if (a||b) {
console. log('這是對的');
}
// !取反,例:n1結果爲false,!n1結果爲true
if (!a&&b) {
console. log('這是對的');
}
if (a || !b) { //一者爲假結果真,!只能單方面改變
console.log('這是對的');
}
//三目運算符, n1>n2?結果爲真執行左邊:結果爲假執行右邊 ;
var n1 = 102;
var n2 = 30;
n1 > n2 ? alert('true執行左邊') : alert('false執行右邊');
//1.取餘,1000天后是星期幾?今天星期六,1000%7(142周,994天后的星期六餘6天往後推算星期五)
var number = ((1000%7)+6)%7;
console.log("1000天后是星期"+number);
//2.用戶輸入雞蛋案例,20個雞蛋一盒:
var a = prompt("請輸入雞蛋的數量");
var b = Math.ceil(a/20); //向上取整Math.ceil();
console.log("盒子的個數爲"+b);
// 3.用戶隨便輸入一個數,獲取百 十 個位數:
var a = prompt("請輸入一個三位數");
var b = Number(a); //先把用戶字符串轉換爲數字
var a1 = parseInt(b/100); //取得百位數;
var a2 = parseInt(b%100/10); //取得十位數;
var a3 = b%100%10; //取得個位;
var he = a1+","+a2+","+a3; //數字輸出會相加,需換成字符串連接
console.log(he);
// if判斷語句,滿足條件時會執行代碼塊,不滿足時會執行另一個代碼塊:
var age = 26;
if (age > 20) { //是否大於20,小於執行下面的代碼,結果爲真執行否則執行下面的;
alert('你可以看了');
}else {
alert('不許看片');
}
//判斷語句可以使一個表達式
var a = 10;
var b = 20;
if((a-b)>10) {
alert('運算錯誤');
} else {
alert('是小於十');
}
//多個判斷語句組合使用:
var a1 = 1;
var b1 = 2;
if (a1 == 2){
alert('錯誤');
} else if (b1 == 1){
alert('錯誤');
} else {
alert('正確');
}
// switch語句(比較語句),對比變量可以使數字也可以是字符串:
// case條件值,break跳出當前循環,default結束整個switch語句;
var n1 = prompt('請輸入你想查詢的天氣');
switch (n1) {
case '晴天':
alert("星期一,16號");
break;
case '小雨':
alert("星期三,18號");
break;
case '多雲':
alert("星期二,17號");
break;
default:
alert("沒有你要查詢的天氣");
}
// while 循環語句:
var a = 1;
while (a<=100) {
document. write('數字:'+a+'<br>');
a++;
}
do while語句先執行一次do的函數,再判斷不滿足再執行do裏面的函數(先執行再判斷):
var a1 = 1;
do {
document. write('數字:'+a1+'<br>');
a1++;
} while (a1<=10);
//案例,隨機產生一個數字,0-9之間,並且接受用戶輸入的數字,只能輸入3次;
var number = parseInt(Math.random()*10); //0-9之間隨機數取整;
var n1 = 1;
while (n1<=3) {
var int = prompt('請輸入0-9之間隨機數'); //用戶輸入;
var int1 = Number(int); //用戶輸入字符串轉換爲數字;
if (number==int1) {
alert('答對了');
// n1=4;
}else {
n1 ++;
}
}
// for循環語句,如果不滿足條件就循環執行:
for(var i=0;i<100;i++) {
document. write(i+'只小鴨子'+'<br>');
}
//計算從0加到100的和;
var a = 0;
for(var i1=0;i1<=100;i1++) {
a = a+i1;
}
console.log(a);
//將1-100之間所有是6的倍數的數字輸出到控制檯中:
for(var i0=1;i0<=100;i0++){
if(i0%6==0){
console. log(i0);
}
}
var i2 =1;
while (i2<=100){
if(i2%6==0){
console. log(i2);
}
i2 ++;
}
//在頁面中打印*三角形打印10行,循環嵌套方式:
for(var a1=1;a1<=10;a1++) {
for(var a2=1;a2<=a1;a2++){
document. write('*'+'\n');
}
document. write('<br>');
}
// break,跳出循環語句,循環到6跳出循環後面不執行:
// continue 僅僅是跳過本次循環,後面的循環繼續執行:
var k = 0;
while (k<10){
k ++;
if (k==6){
break;
// continue;
}
console. log(k);
}
// break,continue簡單案例用戶輸入:
var name = prompt("請輸入您的名字");
var password = prompt("請輸入您的密碼");
while (name!=='admin' || password!=='3224'){ //或一個爲假,結果爲真就執行
alert('輸入錯誤');
name = prompt("請輸入您的名字");
password = prompt("請輸入您的密碼");
if(name=='admin' && password=='3224'){ //與兩個判斷爲真退出;
alert("登入成功");
break;
}else {
continue; //否則就退出當前,繼續循環;
}
}
// 1.創建數組的方式:
// 字面量創建,創建一個空數組:
var arr = [];
var arr1 = [1,'a',4,'g']; //創建數組時添加元素;
// 構造函數方式創建數組,通過創建對象的方式創建數組:
var arr2 = new Array();
var arr3 = new Array(4,'f',3); //創建數組時添加元素;
// 通過元素下標訪問數組元素或添加元素;
var arr4 =[];
arr4[0] = '小明'; //添加元素
arr4[0] = '小紅'; //通過下標修改已有的元素
var a = arr4[0]; //通過下標獲取相對應的元素;
// 2.遍歷數組,利用for循環:
var arr5 = ['小明',5,6,'小李','小王',9];
// 利用for循環遍歷數組,第一種方式:
for(var i=0;i<arr5.length;i++) {
var n = arr5[i];
console.log(n); //遍歷成功;
}
// for循環遍歷 for in,第二種方式:
var m;
for(m in arr5) {
var n1 = arr5[m];
console.log(n1);
}
// 3.數組的常用操作:
var chengshi = ['北京','上海','南京','武漢'];
var chengshi1 = ['廣東','常州','南寧','成都'];
var engLish = ['Tom','Lili','Han','Boss'];
var number = [40,20,13,54,78,65];
var a1 = ['李明',9,'王紅',3,'趙六',7];
// 合併 north.concat()
var chengshis = chengshi.concat(chengshi1);
// 轉換類型: toString(字符串格式),join('?')把數據所有元素連成一個字符串;
var string = chengshi.toString();
var join = chengshi1.join('?');
console.log(typeof(string));
// 排序字母類型數組 indexOf(指定字符串值在字符串中最後出現的位置),lastIndexOf(在字符串中最後出現的位置);
var one = chengshi.indexOf('上海');
var last = chengshi.lastIndexOf('南京',3);
// 排序數字類型數組,sort(升序),reverse(降序);
// 字母升序,漢語按編碼格式不按首字母大小排列,英語按字母大小;
var eng1 = engLish.sort();
// 字母降序,由大往小;
var eng2 = engLish.reverse();
// 數字升序:數字由小至大;
var left = number.sort(function(a,b){return a-b});
// 數字降序:數字由大至小;
var right = number.reverse(function(a,b){return a-b});
// 刪除數組的第一個元素,並返回該元素,數組第一個元素被刪除:
var one = chengshi.shift();
// 刪除數組的最後一個元素,並返回該元素,數組最後一個元素被刪除:
var last = chengshi.pop();
// 追加元素到數組的開端:
var nex = chengshi.unshift('西安');
// 追加元素到數組的末尾:
var xin = chengshi.push('浙江');
// 返回一個子數組,slice(chengshi,one);
console.log(chengshi);
// 按數值大小進行排序,需藉助排序函數:
// function(a,b){return a-b}
// 輸出數組內最大值,比較大小:
var max = 0; //存儲較大值;(比較結果)
var arr = [3,20,23,45,13,67,89,68,5];
for(var i=0;i<arr.length;i++) {
//比較大小,由小往大開始比較,最後爲最大值:
if(arr[i]>max) {
max = arr[i];
}
}
console.log(max);
// (數組遍歷,取出所有的LI)
var li = document.getElementsByTagName('li');
//(獲取所有的li)
for(var i=0;i<li.length;i++){
//(選擇性更改LI中的內容)
li[0].innerHTML = "hi";
}
// 案例一:股票案例;
// // 獲取所有的class;
// function nex (ClassName){return document.getElementsByClassName(ClassName)}
// var li = nex('li');
var li =document.querySelectorAll('li');
for(var i=0;i<li.length;i++){
if(i%2 == 0){
li[i].style.backgroundColor = "#EEEEEE";
}else{
li[i].style.backgroundColor = '#DCDCDC';
}
li[i]. onmouseover = function (){
this.className = "yanse";
}
li[i]. onmouseout = function (){
this.className = '';
}
}
// 案例二:多選框.正選 反選擇案例:
// 獲取所的按鈕:
var buts = document.querySelector('#top').querySelectorAll('button');
// 獲取所有的input:
var ipts = document.querySelector('#bottom').querySelectorAll('input');
// 封裝函數:
function all(dm) {
for(var i=0;i<ipts.length;i++){
ipts[i].checked = dm;
}
}
buts[0].onclick = function () {
all(true);
}
buts[1].onclick = function () {
all(false);
}
buts[2].onclick = function () {
for(var i=0;i<ipts.length;i++){
// 三目運算符裏面的值可以是表達式,可以是具體值
ipts[i].checked == true?ipts[i].checked = false : ipts[i].checked = true;
}
}
<ul>
< li>你是</li>
< li>忘記</li>
< li>毒非</li>
< li>都會結婚</li>
</ul>
var li = document.getElementsByTagName('li');
//(獲取所有的li)
for(var i=0;i<li.length;i++){
//(選擇性更改LI中的內容)
li[0].innerHTML = "hi";
}
<div class="box">
< ul>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
< li class="li">
< span>上證指數</span>
< span>5678</span>
< span>9-6</span>
< span>50%</span>
li>
ul>
</div>
// // 獲取所有的class;
// function nex (ClassName){return document.getElementsByClassName(ClassName)}
// var li = nex('li');
var li =document.querySelectorAll('li');
for(var i=0;i<li.length;i++){
if(i%2 == 0){
li[i].style.backgroundColor = "#EEEEEE";
}else{
li[i].style.backgroundColor = '#DCDCDC';
}
li[i]. onmouseover = function (){
this.className = "yanse";
}
li[i]. onmouseout = function (){
this.className = '';
}
}
<div id="top">
< button>全選</button>
< button>取消</button>
< button>反選</button>
</div>
<div id="bottom">
< ul>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
< li><input type="checkbox"></li>
ul>
</div>
// 獲取所的按鈕:
var buts = document.querySelector('#top').querySelectorAll('button');
// 獲取所有的input:
var ipts = document.querySelector('#bottom').querySelectorAll('input');
// 封裝函數:
function all(dm) {
for(var i=0;i<ipts.length;i++){
ipts[i].checked = dm;
}
}
buts[0].onclick = function () {
all(true);
}
buts[1].onclick = function () {
all(false);
}
buts[2].onclick = function () {
for(var i=0;i<ipts.length;i++){
// 三目運算符裏面的值可以是表達式,可以是具體值
ipts[i].checked == true?ipts[i].checked = false : ipts[i].checked = true;
}
}
//DOM操作 :就是獲取某個元素
// 獲取ID
var div = document.getElementById('one');
console.log(div);
// 獲取屬性(標籤)
var nodeList = document.getElementsByTagName('div');
console.log(nodeList[0]);
//根據name屬性值獲取對應元素,IE瀏覽器認爲只有表單控件的name屬性是合法的
var inputs = document.getElementsByName('sex');
console.log(inputs[0]);
//這個需要注意.這個地方獲取不到
var inputs = document.getElementsByName('one');
console.log(inputs[0]);
1. d.style.left=200+'px';位置往左移動200px;
2. ipt.focus();this.select();自動獲取光標;
3. 獲取所有的Classsname:function nex (ClassName){return document.getElementsByClassName(ClassName)}
<div class="box" >
<!--文本輸入框-->
發送信息:<textarea rows="10" id="one"></textarea>
< button>發送</button>
</div>
/*發送信息案例:###########*/
.box{
margin: 100px auto;
width: 600px;
/*height: 200px;*/
border: 1px solid #333;
}
textarea{
width: 450px;
resize: none;/*防止用戶拖動 */
}
.box li{
width: 450px;
line-height: 30px;
border-bottom: 1px dashed #ccc;
margin-left: 80px;
list-style: none;
}
a{
text-decoration: none;
float: right;
}
// 第一步拿到textarea,從而拿到輸入的內容
var txt = document.getElementsByTagName("textarea")[0];
var but = document.getElementsByTagName('button')[0];
// 第二步生成一個ul,createElement創建一個DOM節點;
var ul = document.createElement('ul');
txt.parentNode.appendChild(ul); //txt.parentNode:返回txt的父節點,appendChild在它後面添加ul節點
// button的點擊事件(發送消息)
but.onclick = function () {
// 點擊按鈕如果輸入爲空,彈出輸入框提示輸入,輸出;
if (txt.value == "") {
alert( '請輸入信息再發送');
return;
}
//創建li賦值爲newLi
var newLi = document.createElement('li');
// li標籤的內容等於文本框中的內容+刪除鏈接
newLi.innerHTML = txt.value + "<a href = 'javascript:;' style='text-decoration:none'>刪除";
// children獲取ul中的所有的子節點,但是不包含空格符和換行符
var lis = ul.children;
// 點擊發送之後將文本框內容清空
txt.value = "";
//將newLi添加到ul上
// ul.appendChild(newLi);
// 如果ul的子元素爲0;
if (lis.length == 0) {
// 在ul中添加子元素li
ul.appendChild(newLi);
} else {
// 否則在ul之前插入新的li爲ul的第一個子元素
ul.insertBefore(newLi, lis[0]);
}
// 刪除信息
// 獲取所有的a節點
var aa = document.getElementsByTagName("a");
console.log(aa);
// 如果小於a的長度自增;
for (var i = 0; i < aa.length; i++) {
//通過遍歷給每一個標籤綁定一個刪除事件
aa[i].onclick = function () {
// 當a點擊移除當前a節點的父節點li
ul.removeChild(this.parentNode);
}
}
}
var div = document.getElementById('one');
// console.log(div.id);
div.id = 'two';
// console.log(div.id);
// console.log(div.title);
div.title = 'it is div';
// console.log(div.className);
// div.className = 'div1';
var style = div.style;
console.log(style);
style.backgroundColor = 'pink';
//獲取屬性值,需要傳遞一個參數:屬性名字符串
var id1 = div.getAttribute('id');
console.log(id1);
var t1 = div.getAttribute('title');
console.log(t1);
var s1 = div.getAttribute('style');
console.log(s1);
// 因爲ie瀏覽器不識別class,他只識別className,所以我們在獲取class屬性值得時候,就必須做判斷
if (div.getAttribute('class')===null){
// IE瀏覽器
console.log(div.getAttribute('className'));
}else {
// 正常瀏覽器(主流瀏覽器)
console.log(div.getAttribute('class'));
}
var id1 = document.getElementById('id1');
console.log(id1.hun);
console.log(id1.getAttribute('hun'));
//setAttribute(屬性名,屬性值):設置某一個屬性值
div.setAttribute('title','itisdiv');
console.log(div.getAttribute('title'));
div.setAttribute('style','background-color:blue;width:100px');
div.removeAttribute('style');
var id1 = div.getAttribute('id'); //獲取div的ID屬性值;
console.log(id1);
var t1 = div.getAttribute('title'); // 獲取div的title屬性值
console.log(t1);
var s1 = div.getAttribute('style'); // 獲取div的style樣式屬性值;
console.log(s1);
// 因爲ie瀏覽器不識別class,他只識別className,所以我們在獲取class屬性值得時候,就必須做判斷
if (div.getAttribute('class')===null){
// IE瀏覽器
console.log(div.getAttribute('className'));
}else {
// 正常瀏覽器(主流瀏覽器)
console.log(div.getAttribute('class'));
}
var id1 = document.getElementById('id1');
console.log(id1.hun);
console.log(id1.getAttribute('hun'));
//setAttribute(屬性名,屬性值):設置某一個屬性值
div.setAttribute('title','itisdiv');
console.log(div.getAttribute('title'));
div.setAttribute('style','background-color:blue;width:100px');
div.removeAttribute('style');
// 獲取元素節點
var div = document.getElementsByTagName('div')[0];
// 獲取所有的子節點
var childs = div.childNodes;
// console.log(childs);
// 獲取第一個子節點
console.log(div.children) // 獲取當前元素的所有子節點;
console.log()
console. log()
console. log()
console. log( div.childNodes[0]);
console.log( div.firstChild); // 獲取當前標籤節點的第一個子節點;
console.log( div.lastChild); // 獲取當前標籤節點的最後一個子節點;
// console.log(div.childNodes[div.childNodes.length-1]);
console.log(div.ownerDocument); // 獲取當前文檔的根節點,相當於document
console.log(div.parentNode); // 獲取當前節點的父節點
console.log(div.previousSibling); // 獲取當前節點的前一個同級節點;
console.log(div.nextSibling); // 獲取當前節點的下一個同級節點
console.log(div.attributes); // 獲取當前節點所有的屬性節點集合
console.log(div.attributes[0]); // 獲取當前節點的第一個屬性節點
// 節點的增刪改查:
// 獲取body;
var body = document.getElementsByTagName('body')[0];
// createElement 創建DOM節點;
var h1 = document.createElement('h1');
// appendChild()向某個元素節點之後添加子節點 將創建出來的節點h1,添加到body中
body.appendChild(h1);
// createTextNode:創建文本節點(文本內容)
body.createTextNode('現在很窮,再不上班吃不起飯');
// insertBefore()在已有的子節點前插入一個新的子節點 有兩個參數,第一個插入的新節點,第二個舊節點
body.insertBefore(p,h1);
// replaceChild()將body中的p標籤替換爲lable標籤,有兩個參數(新,舊)同上;
body.replaceChild(label,p);
// parentNode 返回當前節點的父節點;
console.log(label.parentNode);
// cloneNode 克隆節點,複製所有的屬性和值給某個元素
var newLabel = label.cloneNode(true);
body.appendChild(newLabel);
// removeChild 移除節點
body.removeChild(newLabel);
// 合併同級節點,normalize 方法合併相鄰的文本節點並刪除空的文本節
p.normalize();
// splitText() 拆分,切割文本節點;
p.splitText(4);
// deleteData(起始位置,刪除長度) 刪除文本節點;
p.deleteData(4,5);
// appendData(...) 向文本節點中添加字符串;
p.appendData("添加");
// insertData(插入位置,內容) 在文本節點插入文本內容;
p.insertData(2,'我');
// replaceData(替換位置,替換字符長度,替換內容) 替換文本中內容;
p.replaceData(3,6,'我的字符內容');
// splitText(分割文本位置) 分割文本;
p.splitText(2);
// substringData(提取位置,提取長度) 提取文本內容;
p.substringData(2,6);
// childNodes 返回子節點中的內容帶空格,清除空白;
var div = document.getElementById('one');
console.log(div.childNodes); // 5
// div.childNodes
//篩選掉空白節點 空白節點也屬於文本
function filertNodeSpace(childNode){
var arr = [];
//遍歷子節點
for(var i =0;i<childNode.length;i++){
//判斷是否是空白符或者換行符
if (childNode[i].nodeType ===3 && /^\s+$/.test(childNode[i].nodeValue)){
continue;
}
arr. push(childNode[i]);
}
return arr;
}
var arry = filertNodeSpace(div.childNodes);
console.log(arry);
var n1 = 10.325;
// 獲取數字類型整數;
parseInt(n1);
// 獲取百位;
parseInt(n1/100);
// 獲取十位;
parseInt(n1%100/10);
// 獲取個位;
parseInt(n1%10);
// 獲取上一次左邊定位的值取整;
parseInt(list.style.left);
// 替換文本內容:
n1.innerHTML = 'abc';
<input type="text">
<button id="but">點擊發送</button>
var but = document.getElementById('but');
but.onclick = function(){
var count = 5;
var that = this; //將this存儲到that
var timer = setInterval(changCount,1000);
this.disabled = true;
function changCount(){
count-- ;
if(count >= 0){
that. innerHTML = '還剩'+count+'秒';
console.log(this);
}else {
that. innerHTML = '點擊發送';
clearInterval(timer); //關閉定時器
that.disabled = false;
}
}
}
<img src="images/img.jpg" id="image"/>
#image{
width: 80px;
height: 80px;
position: absolute;
top: 0;
left: 0;
}
var image1 = document.getElementById("image");
var leaderX = 0; var targetX = 0; //x
var leaderY = 0; var targetY = 0; //y
document.onclick = function(event){
var event1 = event || window.event;
targetX = event1.clientX - image1.offsetWidth/2;
targetY = event1.clientY - image1.offsetHeight/2;
}
//緩衝動畫
setInterval(function(){
leaderX = leaderX + (targetX - leaderX)/ 10;
leaderY = leaderY + (targetY - leaderY)/10;
image1.style.left = leaderX + "px"; //X上的動畫
image1.style.top = leaderY + "px"; //y上的動畫
},20);
// 1.窗口事件 window.onload:打開網頁執行; window.onunload:離開網頁執行; window.location.href:窗口頁面跳轉執行;
// 事件的三要素: 事件源.事件 = 事件處理程序,要產生行爲,先要找到對象(事件源);
// 2.鼠標綁定事件:
// onclick:鼠標點擊觸發事件; ondblclick:鼠標雙擊觸發事件;
// onmousedown:鼠標按下時觸發事件; onmouseup:鼠標按鈕鬆開觸發事件;
// onmouseover:鼠標懸浮於目標上觸發事件; onmouseout:鼠標離開觸發事件;
// onmouseenter:鼠標穿過目標觸發事件;onmouseleave:鼠標離開觸發事件;
// onmousewheel:鼠標滾輪滾動時觸發事件; onclientX(), onclientY():指定鼠標在窗口中的座標;
// 3.表單中的綁定事件:
// onchange:當用戶輸入框輸入內容失去焦點時觸發事件,切換下拉列表時也執行; onsubmit:當form表單提交時觸發;
// onreset:當重置按鈕按下時觸發事件; onselect:當文本框內容被選中時觸發;
// onfocus:當輸入框獲取焦點時觸發; onblur:當輸入框失去焦點時觸發; oninput:當輸入框輸入內容時觸發(獲取輸入框內容);
// 4.鍵盤事件:
// onkeydown:當鍵盤被按下時觸發; onkeypress:當鍵盤按下又鬆開時觸發;
// onkeyup:當鍵盤松開時觸發; onkeycode():指定按下或釋放的鍵是哪個;
// 5.圖像事件: onabort當圖像加載失敗時觸發;
<!--鼠標綁定事件:-->
<input type="button" value="請點擊" id="one">
<input type="button" value="請點擊" id="two">
var ipt1 = document.querySelector('#one');
// 添加鼠標點擊事件:
ipt1.addEventListener('click',function() {
alert('我就嘗試下');
},false); //false沒有禁止項;
// 移除事件:
ipt1.removeEventListener('click',function () {
alert('我就試下');
});
//第二種常規:
ipt1.onclick =function () {
alert('我嘗試下');
}
<form action="js練習.php" onsubmit="console.log('哈哈')" onreset="console.log('重置了')">
< input type="button" value="請點擊" onclick="console.log('點擊事件')">
< input type="text" placeholder="請輸入1" onchange="console.log('文本框下拉事件')">
< input type="submit" value="提交" >
< input type="reset" value="重置">
< select onchange="console.log('下拉事件觸發了')">
< option>湖南</option>
< option>山西</option>
< option>廣東</option>
select>
< input type="text" placeholder="請輸入2" onselect="console.log('文本被選中時觸發')">
< input type="text" placeholder="請輸入3" onfocus="console.log('獲取焦點')">
< input type="text" placeholder="請輸入4" onblur="console.log('失去焦點')">
<!--鍵盤按下事件:-->
<input type="text" onkeydown="console.log('鍵盤被按下')">
< input type="text" onkeypress="console.log('鍵盤被按下又鬆開,中文無效')">
< input type="text" onkeyup="console.log('鍵盤松開')">
< input type="text" onkeycode="console.log('鍵盤哪個鍵被按下了')">
</form>
<input type="button" value="點擊" id="but">
var but = document.querySelector('#but');
// console.log(but);
function one() {
console. log('第一次點擊');
}
function two() {
console. log('第二次點擊');
}
function three() {
console. log('第三次點擊');
}
// 使用綁定事件監聽函數,DOM對象(元素).addEventListener(事件名稱,處理函數,false)
// 前綴加on不觸發事件,例:'onclick';兼容IE8及以下版本:but.attachEvent('onclick',one);
but.addEventListener('click',one,false);
but.addEventListener('click',two,false);
but.addEventListener('click',three,false);
<input type="text" id="tet" value="請輸入..."/>
<button id="but">查詢信息</button>
//傳誰的id就獲得誰
function fun(id){return document.getElementById(id);}//就是用來獲取元素的
fun("but").onclick = function(){
if(fun("tet").value == "班長"){
alert("恭喜查詢成功");
}else{
alert("沒有此人");
}
}
<div id="box">
< ul>
< li id="l1"><img src="images/01.jpg"></li>
< li id="l2"><img src="images/02.jpg"></li>
< li id="l3"><img src="images/03.jpg"></li>
< li id="l4"><img src="images/04.jpg"></li>
< li id="l5"><img src="images/05.jpg"></li>
ul>
</div>
<div id="box1">
< input type="text" value="請搜索" id="sousuo">
< button id="bt"></button>
</div>
var box = document.getElementById("box");
// console.log(box);
function nex(liid,bg){
var dian = document.getElementById(liid);
dian.onmouseover = function (){
box.style.backgroundImage = bg;
}
}
nex('l1',"url(images/01big.jpg)");
nex('l2',"url(images/02big.jpg)");
nex('l3',"url(images/03big.jpg)");
nex('l4',"url(images/04big.jpg)");
nex('l5',"url(images/05big.jpg)");
<input type="text" id="tet" value="請輸入..."/>
<button id="but">查詢信息</button>
傳誰的id就獲得誰
function fun(id){return document.getElementById(id);}//就是用來獲取元素的
fun("but").onclick = function(){
if(fun("tet").value == "班長"){
alert("恭喜查詢成功");
}else{
alert("沒有此人");
}
}
<select id="select">
< option value="1">春天</option>
< option value="2">夏天</option>
< option value="3">秋天</option>
< option value="4">冬天</option>
</select>
var select = document.getElementById('select');
// 綁定下拉事件
select.onchange = function(){
// alert('改天了');
switch (this.value){
case '1':
document.body.style.backgroundImage = "url(春夏秋冬/春天.jpg)"
break;
case '2':
document.body.style.backgroundImage = "url(春夏秋冬/夏天.jpg)"
break;
case '3':
document.body.style.backgroundImage = "url(春夏秋冬/秋天.jpg)"
break;
case '4':
document.body.style.backgroundImage = "url(春夏秋冬/冬天.jpg)"
break;
}
}
<script type="text/javascript" src="./tianju.js"></script>
a.hanshu1();b.hanshu1();
<div id="box">
< button class="stop">點擊時間停止</button>
< div class="time"></div>
</div>
// 一次調用setTimeout(),過一段時間做某件事;
function eat(nexter) {
document. write('吃飯'+'<br>');
document.write(nexter);
}
var cleartime = setTimeout(eat,3000); //(調用對象,延遲時間)
// setTimeout(eat('開始調用'),5000); //代入
// 清除定時器;
clearTimeout(clearring);
// 清除定時器案例:
var d = document.querySelector('.time');
function boom() {
document. write('炸掉');
}
var clearring = setTimeout(boom,5000);
d.onclick = function () {
clearTimeout(clearring);
}
// 循環調用,setInterval,每間隔多少時間調用一次;
var d = document.querySelector('.time');
//
// var a = setInterval(function () {
// document.write('洗刷刷'+'
');
// },1000);
setInterval(function () {
d.style.left = 200+'px';
},3000);
清除倒計時:toLocaleTimeString(),根據本地時間把Date對象的時間部分轉化爲字符串;
function myTimer() {
var d = new Date();
var time = d.toLocaleTimeString();
document.querySelector('.time').innerHTML = time;
}
var a = setInterval(function () {
myTimer();
},1000);
// // 點擊停止:
var stop = document.querySelector('.stop');
stop.onclick = function () {
clearTimeout(a);
}
<div id="box">
<!--設原點;-->
<div id="box1" style="left: -360px;">
< img src="images/01big.jpg" alt="">
< img src="images/02big.jpg" alt="">
< img src="images/03big.jpg" alt="">
< img src="images/04big.jpg" alt="">
< img src="images/05big.jpg" alt="">
< img src="images/01big.jpg" alt="">
div>
<!--小圓圈分頁點擊-->
<div id="buttons">
< span index="1" class="one"></span>
< span index="2"></span>
< span index="3"></span>
< span index="4"></span>
< span index="5"></span>
div>
<!--左右箭頭-->
<a href="javascript:;" id="left" class="but"><</a>
< a href="javascript:;" id="right" class="but">></a>
</div>
// 多圖大盒子
var list = document.querySelector("#box1");
// 左邊控件
var prev = document.querySelector("#left");
// 右邊控件
var next = document.querySelector("#right");
// 爲切換按鈕綁定事件,點擊按鈕調用切換圖片的功能實現函數
prev.onclick = function(){
animation(360);
}
// 點擊按鈕調用切換圖片的功能實現函數
next.onclick = function(){
animation(-360);
}
// 當點擊切換按鈕時執行的功能
function animation(offset){
//獲取上一次的定位的值(list.style.left的值爲字符串類型)
var left = parseInt(list.style.left); //-600
// 計算新的需要設置的定位值
var newLeft = left + offset;
// list.style.left需要設置字符串,使用js給元素設置屬性
list.style.left = newLeft + "px";
//判斷左右極限位置做特殊設置,當切換到第七張顯示時回到第二張
if (newLeft<-1800) {
list.style.left = -360 + "px";
}
// 當切換到第一張顯示時回到第六張
if (newLeft>-360) {
list.style.left = -1800 + "px";
}
}
//-----------------定時器輪播
var timer;
function play(){
timer = window.setInterval(function(){
animation(-360)
} ,2000)
}
play();
//------------------- 光標懸停
var container = document.querySelector('#box');
function stop() {
window. clearInterval(timer);
}
container.onmouseover = stop;
container.onmouseout = play;
// 切換圖片顯示,小圓圈同步:
var buttons = document.querySelector('#buttons').querySelectorAll('span');
console.log(buttons);
var index = 1;
function buttonsShow() {
//這裏需要清除之前的樣式
for (var i = 0; i < buttons.length; i++) {
if (buttons[i].className == 'one') {
buttons[i].className = '';
}
}
//數組從0開始,故index需要-1
buttons[index - 1].className = 'one';
}
prev.onclick = function() {
index -= 1;
if (index < 1) {
index = 5;
}
buttonsShow();
animation(360);
}
next.onclick = function() {
//由於上邊定時器的作用,index會一直遞增下去,我們只有5個小圓點,所以需要做出判斷
index += 1;
if (index > 5) {
index = 1;
}
buttonsShow();
animation(-360);
}
// ===========點擊小圓圈同步圖片
for (var i = 0; i < buttons.length; i++) {
// 這裏使用的是匿名函數立即執行,(使用閉包)
(function(i) {
buttons[ i].onclick = function() {
var clickIndex = parseInt(this.getAttribute('index'));
var offset = 360 * (index - clickIndex);
animation(offset);
index = clickIndex;
buttonsShow();
}
})(i) ;
}
<div id="one">
< ul>
< li><img src="04.jpg"></li>
< li><img src="01.jpg"></li>
< li><img src="02.jpg"></li>
< li><img src="03.jpg"></li>
< li><img src="04.jpg"></li>
< li><img src="01.jpg"></li>
ul>
</div>
#one{
width: 600px;
height: 200px;
margin: 100px auto;
position: relative;
overflow: hidden;
}
ul li{
list-style: none;
float: left;
}
ul{
position: absolute;
width: 300%;
}
.yuan{
position: absolute;
left: 50%;
margin-left: -50px;
bottom: 10px;
}
.yuan span{
float: left;
width: 18px;
height: 18px;
background-color: pink;
text-align: center;
line-height: 18px;
margin-right:10px;
border-radius: 50%;
cursor: pointer;
}
.zuo span{
width:38px;
height: 38px;
position: absolute;
background: #000;
cursor: pointer;
color: #ffffff;
line-height: 38px;
text-align: center;
font-family: '黑體';
font-size: 30px;
opacity: 0.3;
border: 1px solid #ffffff;
left: 5px;
top :50%;
}
.you span{
width:38px;
height: 38px;
position: absolute;
background: #000;
cursor: pointer;
color: #ffffff;
line-height: 38px;
text-align: center;
font-family: '黑體';
font-size: 30px;
opacity: 0.3;
border: 1px solid #ffffff;
right: 5px;
top :50%;
}
function nex(TagName) {return document.getElementsByTagName(TagName)}
var ul = nex('ul')[0]; // 第一個UL
var div = nex('div')[0]; // 第一個DIV
var img = nex('img'); // 所有的圖片....
// 定時器10毫秒調用一次,clock名字;
time = setInterval(clock,10);
// 起始位置爲0:
var le = 0;
function clock() {
le --;
if (le<=-1200){
// (定了起始位置,如果小於1200的話就歸0位)
le = 0;
}
// ul的左邊位置=le的長度;
ul.style.left = le + "px";
}
// 鼠標放入圖片盒子停止定時器:
div.onmouseover = function () {
clearInterval(time) ;
}
// 鼠標移出調用定時器
div.onmouseout = function () {
time = setInterval(clock,10);
}
// (創建個div盒子)
var newBox = document.createElement('div');
// console.log(newBox);
// (設置小圓點的元素節點屬性)
newBox.setAttribute('class','yuan');
// (把div添加到主盒子中,把放圓的盒子放入主盒子中)
div.appendChild(newBox);
for (var i=0;i<img.length;i++){
// (創建span元素節點)
var span = document.createElement('span');
// (每次循環給span添加文字,從1開始)
span.innerHTML = i + 1;
// (把span插入新的div中)
newBox.appendChild(span);
}
// 創建2個div,作爲左右箭頭:
var newBox1 = document.createElement('div');
var newBox2 = document.createElement('div');
// 放入圖片盒子中
div.appendChild(newBox1);
div.appendChild(newBox2);
// 給2個DIV添加樣式:
newBox1.setAttribute('class','zuo');
newBox2.setAttribute('class','you');
// 創建2兩個span標籤
var span1 = document.createElement('span');
var span2 = document.createElement('span');
// 放入左右div中
newBox1.appendChild(span1);
newBox2.appendChild(span2);
// 左右span內容爲左右箭頭:
span1.innerHTML = "<";
span2.innerHTML = ">";
<div class="father">
<div class="clock-h" id="div-h"></div>
<div class="clock-m" id="div-m"></div>
<div class="clock-s" id="div-s"></div>
</div>
div.father{
width:600px;
height: 600px;
background:url(images/clock.jpg) no-repeat;
margin: 10px auto;
position: relative;
}
.father div.clock-h{
background: url(images/hour.png) no-repeat center center;
}
.father div.clock-m{
background: url(images/minute.png) no-repeat center center;
}
.father div.clock-s{
background:url(images/second.png) no-repeat center center;
}
.father div{
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
}
.test{
height: 100px;
background-color: red;
}
var hour = document.getElementById("div-h");
var minute = document.getElementById("div-m");
var second = document.getElementById("div-s");
var ms=0,s=0,m=0,h=0;
//設置定時器,時間的取值單位爲毫秒
//需要設置兩個參數 第一個參數爲需要執行的操作 第二個參數爲調用的間隔時間
var test = function(){
// 根據當前的小時數 分鐘數 秒數 計算出指針相對應的旋轉角度
//獲取當前時間
var date = new Date();
// console.log(date);
ms = date.getMilliseconds();
//獲取當前的秒鐘 精確到0.1秒
s = date.getSeconds() + ms/1000;
//獲取當前的分鐘 精確到0.1分
m = date.getMinutes() + s/60;
//獲取當前的小時 精確到分鐘
h = date.getHours() + m/60;
hour.style.transform = "rotate("+ h*30 +"deg)";
minute.style.transform = "rotate("+ m*6 +"deg)";
second.style.transform = "rotate("+ s*6 +"deg)";
console.log(s);
}
setInterval(test,1000);
<div id="demo"></div>
var demo = document.getElementById('demo');
var count = 5;
setInterval(goIndex,1000);//只調用一次
function goIndex(){
count-- ;
demo.innerHTML = "<a href='http://www.baidu.com'>本頁面將在"+count+"秒之後跳轉</a>"
if (count<=0){
//跳轉頁面(自動跳轉) window.location窗口事件
window.location.href = 'http://www.baidu.com';
}
}
// 對象具有兩大特性:1.靜態特徵; 2.是其功能,具體到程序裏面對象的靜態特徵稱之爲對象的屬性,功能稱之爲對象的方法;
// 1.字面量創建對象,使用new關鍵字生成一個對象,newObject():
var myDate = new Object();
// 設置對象的屬性,通過點語法設置對象的屬性,這裏點語法表示setter方法(設置器方法)
myDate.name = '小明';
myDate.age = 20;
// 訪問屬性,通過點語法獲取對象的屬性:
var name = myDate.name;
// console.log(name);
document.write('hello'+myDate.name+'<br>'+'yourage:'+myDate.age);
// 對象字面量創建:
var myDate1 = {
// 創建對象時添加屬性方法:添加屬性 屬性名:屬性值 通過字段定義;
name: '小王',
age: 18,
// 用字符串定義屬性名
'love': '小鄭',
// 在對象中定義方法: 方法名:函數;
loves:function () {
console. log('hello'+this.name+'.');
console.log('age:'+this.age+'.');
console.log('love:'+this.love+'.');
}
};
// 更改裏面的屬性,兩種方法:
myDate1.name = '小紅';
myDate1['love'] = '小李';
// 對象中定義方法的返回值:
myDate1.loves();
// 給對象添加新的屬性:
myDate1.xin = '新屬性';
// 給對象添加新的方法:
myDate1.xin1 = function () {
console. log('hello'+this.name+'.'); //沒顯示,沒報錯;
}
// 檢查對象是否擁有某個屬性,in:
var hasname = 'name' in myDate1; //返回布爾值;
console.log(hasname);
console.log(myDate1); //打印爲Obect對象格式;
// 刪除屬性或者方法
delete myDate1.xin1;
var hasname1 = 'xin1' in myDate1; //返回布爾值;
console.log(hasname1);
// 基本數據類型 不能動態的添加屬性方法;
var n1 = 100;
n1.name = '基本數據類型';
console.log(n1.name); // 結果爲:undefined
// 複製基本類型與引用類型的區別:
// 複製簡單數據類型
var a = 100;
var b = a;
a = a+50;
console.log(a,b);
// 複製引用數據類型:
var copy = new Object();
copy.name = '王寶強';
// 複製操作將copy的內存地址賦給copy1;
// copy,copy1 兩個變量存放的是同一個對象的內存地址,都去引用同一個對象,一旦發生修改就會全部修改;
var copy1 = copy;
console.log(copy,copy1);
copy1.name = '馬蓉';
console.log(copy,copy1); // copy1對象修改內容,copy對象的內容也被修改了;
// 變量的類型檢測:
var a1=1,b1='檢測',c=true,d=undefined,e=null;
var f = new Object();
var g = [1,2,3];
console.log(typeof(a1));
console.log(typeof(b1));
console.log(typeof(c));
console.log(typeof(d));
console.log(typeof(e));
console.log(typeof(f)); // 自定義對象;
console.log(typeof(g)); // 數組對象;
// 創建正則對象
var h = new RegExp();
// 創建字符串對象
var i = new String();
// 創建數字對象
var j = new Number();
console.log(h);
console.log(i);
console.log(j);
// 判斷不同對象類型:instanceof object/Array,判斷對象時否爲對象/數組,布爾類型;
console.log(f instanceof Object);
console.log(g instanceof Array);
console.log(h instanceof RegExp);
console.log(i instanceof String);
console.log(j instanceof Number);
function creatStudent(name,age,class1){
var obj = {}
obj.name = name;
obj.age = age;
obj.class1 = class1;
obj.study = function (){
console. log(this.name+this.age+this.class1+'認真搞學習');
}
return obj;
}
//實例化具體的對象
var obj1 = creatStudent('小王',18,'1班');
var obj2 = creatStudent('小王他哥',19,'2班');
var obj3 = creatStudent('小王他大哥',20,'3班');
obj1.study();
obj2.study();
obj3.study();
console.log(typeof obj1); //檢測類型,爲對象類型
console.log(obj1 instanceof Object);//檢測是否是某一個類型,布爾值true/false;
// 構造函數
// 注意點:構造函數的函數名必須大寫(用來和普通函數區分)
function Student(name,age){
// var obj = new Object()//內部已經幫我們做了
this.name = name;
this.age = age;
this.sing = function (){
console. log(this.name + this.age +'會唱五環之歌');
}
// return obj; //內部已經幫我們做了
}
//具體實例化對象
var s1 = new Student('小明',8);
var s2 = new Student('小紅',9);
console.log(s1 instanceof Student) //
s1.sing();
s2.sing();
function Teacher(name,age){
// 這裏面的this:當我們在實例化對象的時候,這裏面的this就指向當前實例化的那個對象
// var obj = new Object()//內部已經幫我們做了
this.name = name;
this.age = age;
this.sing = function (){
console. log(this.name + this.age +'會唱五環之歌');
}
// return obj; //內部已經幫我們做了
}
var laowang = new Teacher('王老師',30);
var xiaowang = new Teacher('老王',28);
console.log(laowang);
console.log(xiaowang);
console.log(laowang instanceof Student);
// 什麼是單例: 類型 ---->實例對象(唯一一種)
// 汽車(類)----->
// 什麼是單例:使用單例模式創建的對象在程序中有且只有一種,
var box = (function(){
function Car (){} //局部的構造函數,外界不能拿到這個構造函數
var c = new Car(); //根據類型實例化對象
c.name = '瑪莎拉蒂';
c.run =function(){
console. log('這是一輛汽車,可以跑');
}
return c;
})();
// new Car(); //外界不能實例化Car
box.name;
box.run();
(function (){
//創建私有變量
var a= 200;
function f1(){
return a;
}
// function Box(){} //這樣寫是局部的
Box = function (){}; //Box會被視爲全局變量
//創建公開訪問的方法
Box.prototype.publick = function(){
return f1();
}
Box.prototype.setA = function(num){
a = num;
}
})()
var b1 = new Box();
console.log(b1.publick()); //200
b1.setA(200);
console.log(b1.publick()); //200
var b2 = new Box();
console.log(b2.publick()) //200 a現在變成靜態屬性
// 樂器: 鋼琴,小提琴 屬性:價格
// 演奏家:演奏樂器
// 演奏家可以使用各種樂器, 實現輸入1:演奏家演奏鋼琴,輸入2:演奏家演奏小提琴
// 樂器類
function Insturn(name,price){
this.name = name;
this.price = price;
}
//人類
function Performer(){
this.play = function (insturn){
alert('演奏家演奏的'+insturn.name+ '價格爲'+insturn.price);
}
}
function Paion(name,price){
Insturn.call(this,name,price); //對象冒充
}
function Violin(name,price){
Insturn.call(this,name,price); //對象冒充
}
//創建實例對象
var actor = new Performer();
// var paino = new Insturn('鋼琴', 2000);
// var violin = new Insturn('小提琴', 2000);
var p = new Paion('鋼琴', 2000);
var v = new Violin('小提琴', 1000);
//實現演奏
var choice= prompt('請輸入1(演奏鋼琴)或輸入2(演奏小提琴)');
if (choice == '1'){
actor. play(p)
}else if(choice == '2'){
actor. play(v)
}
// 什麼是原型:在js中所有的函數(構造函數,普通函數....),都有一個prototype屬性,
// 這個屬性引用了一個對象,即原型對象,也簡稱原型,也就是說通過這個屬性可以訪問到函數上面的原型對象
// 原型的特點: 如果在原型上添加了屬性和方法,那麼實例化出來的所有實例對象,都有原型上的屬性和方法,並且一模一樣,這樣通過
// 原型對象就實現了數據共享,這是最大的有點也是最大的缺點
function Student(name){
this.name = name;
}
//在構造函數的原型上添加屬性,prototype 屬性使您有能力向對象添加屬性和方法。
Student.prototype.name = '老王';
Student.prototype.age = 18;
//在構造函數的原型上添加方法
Student.prototype.sing = function (){
console. log(this.name+this.age+"五環之歌");
}
console.log(Student.prototype); //Student.prototype:通過函數名訪問原型
var s1 = new Student();
var s2 = new Student();
var s3 = new Student('小王'); //如果屬性裏面有,就直接返回,不回去原型上找
console.log(s3.name);
console.log(s3.age);//如果在類的屬性沒有找到某一個屬性,就會去這個類的原型上找
function Student(name,age){
this.name = name; //實例化屬性
this.age = age;
this.study = function (){
console. log('好好學習');
}
}
//在原型上添加屬性
Student.prototype.schoolname = 9;
//根據指定類型創建具體的對象=====>實例化對象
//只要是通過構造函數實例化出的對象,都會訪問過該構造函數的原型
var s1 = new Student('老王',20);
//原型對象:每一個函數都有原型
console.log( Student.prototype); //通過prototype屬性訪問原型對象
console.log( s1.__proto__);
console.log( s1.constructor); //這樣訪問可以拿到當前的構造函數
console.log(Student.prototype.isPrototypeOf(s1));
function Teacher (height){
this.height = height;
};
//創建一個構造函數
//在構造函數的原型上面添加屬性和方法
Teacher.prototype.name = 'Lee';
Teacher.prototype.age = 18;
Teacher.prototype.run = function(){
console. log('開始跑');
}
var t1 = new Teacher();
var t2 = new Teacher();
console.log(t1.name);
//在外面給t1對象,另外添加一個name屬性
t1.name = 'Hi';
delete t1.name;
console.log(t1.name); //就近打印出來的是Hi
console.log(t2.name);
//hasOwnProperty:用來判斷某一個屬性是在實例屬性還是在原型對象上,如果在實例屬性上就返回true,反之就是false
console.log(t2.hasOwnProperty('height'));
var obj ={
name :'li',
age:18
}
function Student (){}
//通過字面量的方式給原型添加屬性
Student.prototype ={
name :'Li',
age:18,
//由於{}相當於已經創建了一個新的Object類型的對象,需要我們手動將當前的原型指向當前的構造函數
constructor:Student
}
Student.prototype.name = 'Li';
var s1 = new Student();
var s2 = new Student();
console.log(s1.name);//undefined
console.log(s2.name);//undefined
console.log(s1.height);
//內置引用型,也有原型
var arry = new Array();
console.log(typeof arry);
console.log(String.prototype);//如果可以訪問到,說明內置型也有也有原型
console.log(Array.prototype.sort);
console.log(String.prototype.substring);
//給String的原型上手動添加了一個方法(一般不這樣做,有風險)
String.prototype.addstring = function(){
console. log('被添加了');
}
console.log('LILI'.addstring);
// 創建汽車類型(品牌,排量,開始,停止)
function Car (brand,displacment){
//實例化屬性
this.brand = brand;
this.displacment = displacment;
}
//車子啓動和停止的方法添加到原型上(因爲這兩個方法是所有的實例對象都要有的屬性)
Car.prototype.start = function (){
console. log('排量爲'+ this.displacment +'的' + this.brand+'小汽車啓動了');
}
Car.prototype.stop = function(){
console. log('排量爲'+ this.displacment +'的' + this.brand+'小汽車停止了');
}
//通過類創建具體的實例對象
var ms = new Car('瑪莎拉蒂',2.0);
ms.start();
ms.stop();
//創建車燈對象
function Lamp(){
this.open = function (){
console. log('車燈打開了');
}
this.close = function(){
console. log('車燈關閉了');
}
}
var lamp = new Lamp();
lamp.open();
lamp.close();
function Car2 (brand,displacment,lamp){
this.brand = brand;
this.displacment = displacment;
this.lamp = lamp;
this.start = function (){
this.lamp.open();
console.log('排量爲'+ this.displacment +'的' + this.brand+'小汽車車燈打開了然後啓動了');
}
this.stop = function (){
this.lamp.close();
console.log('排量爲'+ this.displacment +'的' + this.brand+'車燈關了小汽車停止了');
}
}
var c2 = new Car2('法拉利',2.0,Lamp);
c2.start();
c2.stop();
//繼承:一個對象繼承與另外一個對象,同時繼承了他的屬性和方法
//被繼承類型(父類型)和繼承類型(子類型)
function Parent(name,age){
this.name = name;
this.age = age;
this.sleep = function (){
console. log("睡覺")
}
}
function Son1 (height){
this.height = height;
}
// new Parent()就是創建了一個實例對象,因爲實例對象本身帶有屬性和方法,然後交給Son的原型
Son1.prototype = new Parent('小黃',40);
var s1 = new Son1(185);
console.log(s1.name);
console.log(s1.age);
s1.sleep();
function Son2(){
}
Son2.prototype = new Son1(186);
var s2 = new Son2();
console.log(s2.name);
console.log(s2.age);
s2.sleep();
console.log(s1 instanceof Parent); //ture
console.log(s1 instanceof Son1); //ture
console.log(s2 instanceof Parent); //ture
console.log(s2 instanceof Son1); //ture
console.log(s1 instanceof Son2); //false
function Parent(name,age){
this.name = name;
this.age = age;
}
// prototype向對象添加屬性和方法;
Parent.prototype.sleep(){
console. log('睡覺了');
}
function Son(name,age){
//使用對象冒充,用對象Parent替換當前對象apply();
Parent.apply(this,[name,age]);
}
//原型鏈繼承
Son.prototype = new Parent();
//組合繼承可以實現個性化(對象冒充) //原型鏈繼承實現共享
var xiao = new Son('小明',17); //
var did = new son('小明弟弟',16);
// 匿名函數:就是沒有名字的函數
// 閉包: 是一種特殊的匿名函數,能夠訪問另一個函數作用域中變量的函數;
// 聲明普通函數
function sun(a, b) {
return a + b;
}
var he = sun(10,10);
console.log(he);
// 聲明匿名函數
// 直接將匿名函數放在程序中會報錯
// function (){
// return 1;
// }
// 解決的第一種辦法:使用直接量來接收
var f1 = function (){
var a= 100;
return a;
};
f1();
console.log(f1);
// 解決的第二種辦法:匿名函數的自我執行
(function (){
console. log("匿名函數自執行");
})();
//匿名函數的傳遞參數問題
(function (a,b){
console. log(a+b);
console.log(this);
})(10,20);
// 閉包: 是一種特殊的匿名函數,能夠訪問另一個函數作用域中變量的函數;
// function fa(){
// var a = 100;
// (function (){
// alert(++a);
// })();
// }
// fa();
function fun(){
var a = 100;
var b = 200;
return function (){
console. log(a,b);
return a+b;
}
}
console.log(fun());
console.log(fun()()); //輸出內層函數執行的結果,100 200 300;
function fd(){
var a = 100;
return function (){
++a;
return a;
}
}
var box = fd();
console.log(box());
console.log(box());
console.log(box());
<button id="but1">
向前跑
</button>
<button id="but2">
向後跑
</button>
<div id="box"></div>
var but1 = document.getElementById('but1');
var but2 = document.getElementById('but2');
var div = document.getElementById('box');
function move (){
return function(){
div.style.left = div.offsetLeft +30+'px';
}
}
var demo = move();
but1.onclick = demo;
function move2 (){
return function(){
div.style.left = div.offsetLeft + (-30) +'px';
}
}
var demo2 = move2();
but2.onclick = demo2;
function box(){
var arr = [];
for (var i = 0;i<5;i++) {
arr[i] = (function (){
return function (){
return i;
};
})();
}
return arr;
}
var b = box();
console.log(b);
for ( var i = 0;i < b.length;i++) {
console. log(b[i]());
}
var name = "THE window";
var obj = {
name : 'THE obj',
getFunction : function (){
console. log(this.name); //'THE obj'
return function (){
console. log(this); //obj2
return this.name; //'the obj2'
}
}
}
var obj2 = {name : 'the obj2'}
// apply()用一個對象替換當前對象:
console.log(obj.getFunction().apply(obj2));
<button>排他思想</button>
<button>排他思想</button>
<button>排他思想</button>
<button>排他思想</button>
.one{
background-color: red;
}
button{
height: 50px;
outline: none;
}
//取得所有的button
var buts = document.getElementsByTagName("button");
//通過循環拿到每一個button
for (var i = 0;i<buts.length;i++) {
buts[i]. onclick = function(){
for (var j = 0;j<buts.length;j++) {
buts[j].className = '';
}
this.className = 'one';
}
}
<div id="box">
< div id="libox">
< ul>
< li>新聞</li>
< li>體育</li>
< li>娛樂</li>
< li>笑話</li>
ul>
div>
< p>新聞版塊</p>
< p>體育版塊</p>
< p>娛樂版塊</p>
< p>笑話版塊</p>
</div>
#box{
width: 400px;
height: 370px;
margin: 100px auto;
overflow-y: hidden;
/*background-color: skyblue;*/
}
#libox{
width: 400px;
height: 35px;
background-color: #008080;
}
#libox li{
height: 35px;
width: 100px;
list-style: none;
float: left;
text-align: center;
line-height: 35px;
}
#box p{
width: 400px;
height: 335px;
font: 700 35px/335px 'sinsong';
text-align: center;
background-color: #008040;
}
// (獲取所有所需屬性)
function nex (TagName){return document.getElementsByTagName(TagName)}
// console.log(nex);
// (獲取所有li)
var li = nex('li');
// (獲取所有的p)
var p = nex('p');
// (取出所有的li遍歷)
for(var i=0;i<li.length;i++){
// (獲取每一個li)
li[i].index = i;
// (當指針懸浮在li標籤上的時候)
li[i].onmouseover = function (){
for(var j=0;j<p.length;j++){
p[j].style.display = 'none';
li[j].style.background = '#008080';
}
p[ this.index].style.display = 'block';
li[this.index].style.background = '#008040';
}
}
screenLeft/screenTop 返回相當於屏幕X和Y的座標;
// 不支持IE
screenX/screenY 返回相當於屏幕X和Y座標;
// 第一個參數使我們要匹配的字符;第二個參數是要匹配的模式
// 第一種:通過new關鍵字創建
var reg1 = new RegExp('W','g');
// 第二種:通過字面量的方式創建一般用這種,用兩個反斜槓,斜槓中間爲匹配字符
// 匹配模式在後面;
// i表示忽略大小寫; g表示全局匹配
var reg2 = /e/ig;
// 正則表達式有兩種測試方法
// test():測試是否匹配返回 true或false
// ese();執行匹配搜索,成功返回相關信息,失敗返回null;
// string字符串類型有4種正則表達式方法:
// 返回所有匹配到的結果;
var s = 'hello';
var n = /e/ig;
console.log(/e/ig.test(s));
// 1.match(表達式)返回所有匹配到的內容;
var n1 = s.match(n);
console.log(n1);
// 2.replace(表達式,替換內容) 替換匹配到的字符;
var s1 = s.replace(n,'a');
console.log(s1);
// 3.search(正則表達式)返回字符串中被匹配到的第一個字符的位置,如果沒找到就返回-1;
var n2 = s.search(n);
console.log(n2);
// 4.以被匹配到的字符爲分隔符,分割爲數組,原數組不受影響;
var s2 = s.split(n);
console.log(s2);
// 正則表達式的RegExp靜態屬性,ipput;
input 簡寫 :$_ 當前被匹配的字符串;
lastMatch 簡寫 :$& 最後一個匹配字符串;
lastParen 簡寫 :$+ 最後一對圓括號內的匹配字符串;
// leftContext 簡寫:$` 最後一次匹配左邊的字符串;
rightContext 簡寫 :$' 在上次匹配之後右邊的字符串;
// 正則表達式重點:元字符,出了特殊字符使用多次外其他字符默認使用一次;
// /...../反斜槓後元字符將失去其特殊含義,變成普通字符;
// 元字符: 以^開頭以$結尾;
// {3}表示剛好只能放3個;
// 檢查郵政編碼,有6位第一位不能爲0;
/i : 忽略大小寫;
/g : 全文查找出現的所有匹配字符;
/m : 多行查找;
/gi : 全文查找,忽略大小寫;
/ig : 全文查找,忽略大小寫;
. : 匹配除換行符外的任意字符;
[a-z0-9] : 匹配括號中的字符集中的任意字符;
[^a-z0-9] : 匹配任意不在字符集中的字符;
\d : 匹配數字;
g : 執行全局匹配;
\D : 匹配非數字;
\w : 匹配字母和數字及_;
\W : 匹配非字母和數字及_;
\o : 匹配null字符;
\b : 文本開頭匹配是否到邊界;
\f : 匹配進制字符,$1-$99文本;
\n : 匹配換行符;
\r : 匹配回車字符;
\t : 匹配製表符;
\s : 匹配空白字符,空格 製表符和換行符;
\S : 匹配非空白字符;
// 匹配重複字符:
x? : 匹配0個或1個x;
x* : 匹配0個或任意多個x;
x+ : 匹配至少1個x;
(xyz)+ : 匹配至少1個xyz;
x{m,n} : 匹配至少m個最多n個x;
this/where/logo : 匹配this where或logo中的任意一個;
var reg1 = /google/ig;
var reg2 = /g/ig;
var str = 'This is google';
var str2 = 'this is world';
console.log(reg1.test(str)); //必須匹配一次,返回布爾值;全局匹配str中是否有字符串'google'
console.log(reg2.exec(str2)); // 返回具體位置,失敗爲null,全局匹配str2中是否有g,結果爲null
console.log(reg1.test(str2)); // 全局匹配str2中是否有字符串google,false
console.log(reg2.exec(str)); // str中是否有字符串'g',返回字符串具體位置
console.log(RegExp.input,RegExp.$_); //拿到當前被匹配的字符串,如果是多次匹配,拿到的是第一次
console.log(RegExp['$&']); //lastMatch多次匹配,拿到的是最後一次匹配的字符,匹配的是g
var str = 'hello world blue';
console.log(reg1.lastIndex); //整數,代表下次匹配將從哪個字符位置開始
reg1.lastIndex = 0; //強行重新開始(用的不多)
var str = '_Bl123l06A這是一個界面很low的網站';
var reg1 = /./ig; //.:匹配除換行符外的任意字符
var reg2 = /[a-z0-9]/g; //匹配括號中的字符集中的任意字符,只能匹配一個
var reg3 = /[^A-Z0-9]/; //匹配非括號中的字符集中的任意字符,只能匹配一個
var reg4 = /\d/; //匹配數字
var reg5 = /\D/; //匹配非數字,同[^0-9]相同
var reg6 = /\w/; //匹配字母和數字及_
var reg7 = /\W/; //匹配非字母和數字及_
console.log(reg1.exec(str));
console.log(reg2.exec(str));
console.log(reg3.exec(str));
console.log(reg4.exec(str));
console.log(reg5.exec(str));
console.log(reg6.exec(str));
console.log(reg7.exec(str));
var reg1 = /k[0-9]?/; //x?:匹配0個或1個x
var str = 'lk8ll';
console.log(reg1.exec(str));
var reg2 = /[a-z]*/; //x*:匹配0個或任意多個x
var str1 ='lelloworld';
console.log(reg2.exec(str1));
var reg3 = /abc+bnh/ //X+:匹配至少一個x
var str3 = 'nhabbnhkkk';
console.log(reg3.exec(str3));
var reg4 = /g(og)+le/; //()括起來就代表一個整體
var str4 = 'gogle';
console.log(reg4.exec(str4));
var reg5 = /[0-9]{4,11}/ //x{m,n} 匹配最少m個、最多n個x
var str5 = '123456767';
console.log(reg5.test(str5));
var reg6 = /google|baidu/ //this|where|logo:匹配this或where或logo中任意一個
var str6 = '谷歌baidu很牛逼';
console.log(reg6.exec(str6));
var str = 'google';
console.log(reg.test(str));
//.匹配除換行符外的任意字符,*匹配0個或多個g;
var reg = /g.*/;
var str = 'google';
console.log(reg.exec(str));
// g a-zA-Z任意多個gle ggle
var reg = /g[a-zA-Z_]*gle/;
var str = 'g123ggle';
console.log(reg.exec(str));
// 匹配gg 不在0-9中匹配任意多個,gle null;
var reg = /gg[^0-9]*gle/;
var str = 'google';
console.log(reg.exec(str));
// a-z A-Z至少匹配一個;
var reg = /[a-z][A-Z]+/;
var str = 'gOoGLE';
console.log(reg.exec(str));
// 匹配數字字母以及_匹配0個或任意多個 gle
var reg = /\W*gle/;
var str = 'google';
console.log(reg.exec(str));
// google 匹配數字0個或任意多個;
var reg = /google\d*/;
var str = 'google';
console.log(reg.exec(str));
// 匹配非數字至少4個最多8個;
var reg = /\D{4,8}/;
var str = 'goo&()_';
console.log(reg.exec(str));
// goo匹配空白字符,空格 製表符和換行符0個或任意多個;
var reg = /goo\s*gle/;
var str = 'goo\n gle' ;
console.log(reg.exec(str));
// 匹配至少2個最多3個google,至少1個a-z ha;
var reg = /(google){2,3}[a-z]+ha/;
var str = 'googlegoogleaha';
console.log(reg.exec(str));
//^不在[]裏面表示以某某開頭 $表示以某某結尾,googl 0-9匹配0個或任意多個,a-z匹配0個或任意多個;
var reg1 = /^googl[0-9]*[a-z]*$/
var str1 = 'googl123a';
console.log(reg1.exec(str1));
// \b文本開頭是否到邊界,google;
var reg2 = /\bgoogle/;
var str2 = 'google';
console.log(reg2.exec(str2));
//{4}表示就是4個;{4,}表示至少四個,匹配至少1個a-z,匹配空白字符,空格 製表符和換行符,匹配4個0-9;
var reg3 = /^[a-z]+\s[0-9]{8}$/i;
var str3 = 'google 20124567';
console.log(reg3.exec(str3));
// 匹配至少1個a-z,忽略大小寫;
var reg4 = /^[a-z]+/i;
var str4 = 'google 2012';
console.log(reg4.exec(str4));
//匹配郵政編碼,郵政編碼是6位,第一位不能爲0
var reg5 = /^[1-9][0-9]{5}$/;
var str5 = '241234';
console.log(reg5.exec(str5));
// 放置壓縮文件,匹配字母和數字以及_,匹配除換行符外的任意字符,三種壓縮格式zip|rar|gz;
var reg6 = /^\w+\.(zip|rar|gz)/;
var str6 = '109.zip';
console.log(reg6.exec(str6));
// 0-9匹配0個或任意多個至少匹配1個oo,匹配除換行符外的任意字符,匹配至少一個gle;
//如果有分組,那麼用exec就會將分組的內容也打印出來
var reg7 = /[0-9]*(oo)\.(gle)/
var str7 = '223oo.gle';
console.log(reg7.exec(str7));
//[email protected] [email protected]
// 0-9 a-z匹配至少1個@0-9 a-z至少匹配一個,匹配除換行符外的任意字符,匹配a-z至少2個最多3個;
var reg8 = /^[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,3}$/;
var str8 = '[email protected]';
console.log(reg8.exec(str8));
// BOM沒有標準,BOM本身缺少規範;瀏覽器共有的對象就是規範;window對象處於javascript最頂層;
// prompt彈出框,提示文本;
prompt('我就嘗試下');
// alert 彈出框,警告框;
alert('這是一個警告框');
// confirm確認操作;
confirm('請確認');
// window.print 調出打印機;
window.print('調出打印機');
// 也可以設置寬高,上 左位置;
window.open('http://www.baidu.com','這是窗口','width=200px,height=100px,top=20px,left=10px');
// screenLeft,screenTopa拿到屏幕左邊和上面的距離,火狐支持;
// 火狐支持screenX和screenY這兩種格式;
var a = window.screenLeft;
var b = window.screenTop;
var c = window.screenX;
var d = window.screenY;
// 兼容版本:
var e = (typeof screenLeft == 'number') ? screenLeft : screenX;
var f = (typeof screenTop == 'numeber') ? screenTop : screenY;
var g = x+'+'+y;
// 獲取窗口大小,高度帶有狀態欄,這些屬性不兼容IE;
console.log(innerWidth);
console.log(innerHeight);
console.log(outerWidth);
console.log(outerHeight);
console.log(documentElement.clientWidth);
console.log(documentElement.clientHeight);
// 超時調用,處處某段時間間隔就調用一次
var num = 0;
var timer = setInterval(function () {
num++ ;
document.write(num);
if(num == '5'){
// 關閉定時器;
clearInterval(timer);
}
} ,1000);
console.log(timer);
// location port端口號,assign網頁重定向,reload重源頭加載,replace替換當前的網址,reload一直加載;
location.assign('http://www.baidu.com');
location.replace('http://www.guge.com');
location.reload();
location.port(80);
// 類名封裝;
function getClass(classname) {
// 返回數組;
var arr = [];
// 獲取所有的元素;
var dom = document.getElementsByTagName('*');
// 遍歷獲取每一個元素;
for(var i=0;i<dom.length;i++){
// 分割每一個類名,並轉換爲數組,split('')拆分;
var texarr = dom[i].className.split('');
for(var j =0;j<texarr.length;j++){
// 遍歷拆分的數組;
if(texarr[j] == classname){
// 每一個拆分的classname轉換爲數組;
arr.push(dom[i]);
}
}
}
return arr; // 輸出數組;
}
function $(str) {
// 儲存了參數str中的第一個字符;
var s = str.charAt(0);
// 儲存了前綴以後的所有字符:
var ss = str.substr(1);
switch(s){
case '#':
return document.getElementById(ss);
break;
case '.':
return getClass(ss);
break;
default:
return document.getElementsByTagName(str);
break;
}
}
$('#demo').style.background = 'red';
var divone = $('.one');
console.log(divone);
for(var i=0;i<divone.length;i++){
divone[i].style. backgroundcolor = 'red';
}
$('#but').style.backgroundColor = 'yellow';