JS知識雜記

 

javascript是一種基於瀏覽器在客戶端運行的腳本語言

 

 

什麼是腳本語言:

腳本語言本身不提供任何功能,它的所有基礎功能都是系統提供給它的。大多數情況,直接解析,無需編譯,有些語言小部分需要編譯

 

 

javascript 的四種聲明方式

1、<ahref="javascript:alert('hello world!')">第一個javascript</a>

 

2、點擊事件

<divοnclick="alert('你好世界')">容器</div>

 

3、寫在任意位置

<scriptlanguage="javascript">

alert('彈框');

</script>

 

4、文件源方式

<script src="文件源.js"></script>

 

 

javascript當中的執行符:1、分號  2、回車

 

javascript的註釋:

//單行註釋

/*

多行註釋

*/

 

 

變量聲明

 

1、var  開始

2、不能有敏感關鍵詞

 

 

javascript當中的數據類型有

 

整形

var i=123

alert(typeof(i))       //測試類型

var  i=077             //八進制

var  i=0x21           //十六進制

 

 

字符串(直接加雙引號或單引號)

雙引號和單引號無區別:都不能解析變量,都能解析特殊字符\n,\r,\t等

var t="字符串";

字符串拼接符:+

 

 

布爾

var bo=true;

varbo=false;

 

 

對象

var d=newDate();        //獲得的時間爲客戶端時間

alert(d.getFullYear);

 

空對象

var d=null;

alert(typeof(d));

 

 

當使用一個未聲明的變量的時候,它的數據類型爲undefined類型

 

NaN非數字類型

 

但是js是面向對象的,也可以說js只有一種數據類型,就是對象類型

 

var  str='12345';

var  tt=new  String('1231');

 

 

自動類型轉換

 

字符串'0'在php中爲假,在js中爲真

 

var t=0;

 

if(t){

alert('真');

}else{

alert('假');

}

 

 

 

強制類型轉換

var t=1.999;

alert(parseInt(t));         //強制轉整

parseFloat                    //強制浮點轉換

 

 

 

運算符

+   —   *    /    %

 

++       ——            =

 

+=       —=       /=        *=        %=

 

==       ===           !=        !==

 

instanceof

 

&&        ||         !

 

三元運算符   ? :

 

New     創建對象實例

 

void     執行表達式而忽略結果      //加在超鏈接中,不使用css就能做到超鏈接點擊不變色

<ahref="javascript:void(0)"></a>

 

typeof  類型檢測

 

length  檢測長度

var g = newArray(1,2,3);

alert(g.length);

 

delete   刪除new創建的對象

 

.           快速存取對象屬性或方法

 

,         按順序讀取左右兩邊的數據

[]         數組存取

this       返回當前對象的引用

流程控制

 

if(){

 

}else if(){               //js中的else if是帶空格的

 

}

=========================

switch(){

case 1:

break;

case 2:

break;

default:

}

==============================

var i=0;

document.write('<tablewidth="800" border="0">');

while(i<100){

if(i%10==0){

document.write('<tr>');

}

document.write('<td>'+i+'</td>');

i++;

if(i%10==0){

document.write('</tr>');

}

}

document.write('</table>');

=============================

do{

 

}while();

 

============================

for(i=0;i++;i<1000){

 

}

 

 

 

 

 

 

 

 

函數

形參不能有默認值

 

function demo(n,m){

alert(123);

}

demo();

==================

function demo(){

return 123;

}

var d = demo();

alert(d);

 

 

變量作用域

 

函數體外聲明(存在關鍵字var纔是初始化變量)的變量就是全局變量,函數體內聲明的變量就是局部變量

全局變量在函數體內和函數體外都有效

局部變量只在函數體內有效

========================

var t=10;               //全局變量

function demo(){

alert(t);     

}

demo();                 //輸出10

========================

var t=10;               //全局變量

function demo(){

var t=5;           //局部變量

alert(t);           

}

demo();                 //輸出5

alert(t);                  //輸出10

=========================

var t=10;

function demo(){

t=20;               //僅僅是賦值而不是初始化變量

alert(t);

}

demo();                 //輸出20

alert(t);                  //輸出20

 

變量函數     ---------------->>匿名函數    ----------------->>回調函數

 

function demo(n,m){

alert(n+m);

}

//demo(5,6);

var t=demo;                //不加引號

alert(t);                        //輸出demo的函數結構

t(2,3);                    //變量函數

=====================

var t=function demo(n,m){

alert(n+m)

}

t(5,4);                    //變量函數

=====================          匿名函數

var t=function(n,m){

alert(n+m)

}

t(5,4);                    //匿名函數

 

==================           回調函數

function ys(n,m,func){

return n+m+func(n,m);

}

 

var g=ys(5,6,function(n,m){

return n*m;

});

alert(g);                 //輸出41

 

 

 

可變長度參數列表

function demo(){

var t=arguments;

var total=0;

for(i=0;i<t.length;i++){

total+=t[i];

}

alert(total);

}

demo(1,2,3,4,5,6,7,8,9);

 

 

默認參數寫法

function demo(n,m){

if(typeof(n)=='undefined'){

n=5;

}

if(typeof(m)=='undefined'){

m=6;

}

alert(m+n);

}

demo();

 

 

 

內部函數

js中的內部函數不需要寫在調用處的上面

不可以在外部使用內部函數

function nb(n,m){

return n*m+test(n,m);

function test(n,m){

return n+m;

}

}

var t=nb(5,6);

alert(t);

 

 

 

面向對象

js裏面沒有類,只有對象;

js和php的對比:

PHP            對象                  類

JS        對象實例            對象

 

聲明對象的三種方式:

1、實例化一個新的對象實例,向對象實例當中追加成員屬性和成員方法

var person =new Object();

person.name= '姓名';

person.sex ='男';

pereon.age =18;

person.say =function(){

alert('我叫'+person.name+'我的性別'+this.sex+'年齡'+this.age);

}

person.say();          //調用

2、聲明一個對象,實例化

functionperson(name,sex,age){

this.name =name;

this.sex =sex;

this.age =age;

 

this.say =function(){

alert('我叫'+this.name+'我的性別'+this.sex+'年齡'+this.age);

}

}

var p = newperson('姓名','性別','年齡');

 

3、JSON(js輕量級數據交換對象)方式        js快速聲明對象【重點】

var person ={name:'姓名',sex:'性別',age:18,say:function(){

alert('我叫'+this.name+'年齡'+this.age+'性別'+this.sex);

}}

person.say();

 

 

遍歷對象

for(臨時變量 in  對象){

 

}

 

for(a in person){

document.write(a+''+person[a]+'<br />');

}

 

 

with           //對一段代碼使用默認的對象

with(person){

say();

say();

}

 

 

數組聲明

沒有數組類型,只有數組對象

 

1、快速聲明

var arr=['值1','值2'];

alert(arr);        

alert(typeof(arr))    //object

 

delete arr[1];         //刪除值2

for(a in arr){                //數組的遍歷

document.write(a+''+arr[a]+'<br />');

}

 

 

2、標準聲明

var b = new Array();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BOM1

js知識點的組成:

 

BOM     browser object model         瀏覽器對象模型

地址欄   狀態欄   收藏夾   滾動條   頁面組合在一起

DOM    document object model           文檔對象模型

DOM是BOM的一個部分,很多效果都是在文檔裏面顯示的

document,form ,image

 

js效果原理:

在某事件源上面產生了某個事件觸發了事件處理程序。在事件處理程序當中找對象,改屬性

 

元素:

頁面當中可見和不可見標籤(<tag>),都可以叫做元素

元素之間是有層次結構的

 

元素可以轉爲對象:

元素可以理解爲HTML裏面的標籤,若想改變它,需要把元素轉爲對象

===========================

<div id="a">

</div>

<script>

var a =window.document.getElementById('a');//window當前窗體下的文檔窗體

alert(a);                       //輸出object

a.style.backgroundColor='pink';

a.innerHTML = '內部html文檔';

</script>

============================

 

所有對象以window開始,可有可無

dom的執行順序是從上到下執行

 

 

常用的DOM對象屬性

 

------------------Object.target

<a href="http://www.baidu.com" target="_blank"id="a">百度</a>

<script>

var d =window.document.getElementById('a');

alert(d.target);                   //彈出target屬性

d.target ="_self";

</script>

 

------Object.innerHTML       包含內部HTML標籤的文檔

------Object.innerText         不包含內部標籤的文字【與火狐不兼容,火狐下叫                                                textContent】

解決方法

if(typeof(a.textContent)=='undefined'){

alert(a.innerHTML);

}else{

alert(a.textContent);

}

 

 

 

如何獲取對象中的屬性

使用for....in語句

for(a in objectTest){

window.document.write(a+' '+b[a]+'<br/>');

}

 

 

------Object.style          樣式(Object數據類型)

var a =window.document.getElementById('sl').style;

for(b in a){

window.document.write(b+''+a[b]+'<br />');

}

 

-------Object.style.backgroundColor

 

 

--------Object.               //表單

<form name="fname">

<input type="text"name="tname" value="表單文字" />

</form>

var h=window.document.fname.tname;

h.value='';

 

-------Object.className            //樣式名(class的名字)

 

 

 

 

<button οnclick="show()"></button>

事件源         -------在什麼地方發生的事件         如:button標籤

事件            --------在什麼情況下發生的事件    如:onclick

事件處理程序      ----事件的處理                      如:show()

 

任何元素都可以作爲事件源,一個事件源上可以有多個事件

 

事件

mouseover       鼠標懸停

<div οnmοuseοver="show()"></div>

 

mouseout         鼠標離開

 

mousemove

 

keypress

 

keyup               釋放某個按鍵時

 

onblur              失去焦點

光標在某處,然後離開則失去焦點

 

常用事件

onblur:(使用在表單元素中,當元素失去焦點的時候執行)   

onchange:(使用在表單元素中,當某些東西改變時執行)   

onclick:(鼠標點擊一個元素時執行)   

ondblclick:(鼠標雙擊一個元素時執行)   

onfocus:(使用在表單元素中,當元素獲得焦點時執行)   

onkeydown: (按下某個按鍵時執行)    

onkeypress:(按下和釋放某個按鍵時執行)   

onkeyup:(釋放某個按鍵時執行)     

onmousedown:(按下鼠標按鍵時執行)   

onmousemove:(鼠標光標在元素上移動時執行)   

onmouseout:(鼠標光標移開元素時執行)   

onmouseover:(鼠標光標移到元素上時執行)   

onmouseup:(當釋放鼠標按鍵時執行)   

onreset:(用在表單元素中,當表單重置時執行)   

onselect:(用在表單元素中,當元素被選擇時執行)   

onsubmit:(用在表單元素中,當表單提交時執行)   

onload:(在body標籤中使用,載入頁面的時候執行)   

onunload:(用在body標籤中,當關閉頁面時執行)   

 

事件中this的使用

========= 使用this前 ==========

<inputtype="text" οnclick="show()" value="請輸入用戶名" id="i"/>

            <script>

                  function show(){

                        var b =window.document.getElementById('i');

b.value='';

                  }

            </script>

=========== 使用this時 ==========

<inputtype="text" οnclick="show(this)" value="請輸入用戶名" />

            <script>

                  function show(obj){

                        obj.value='';

                  }

            </script>

 

 

 

三種事件處理程序的聲明方法

 

1、將事件處理函數名寫在事件內

<divοnclick="show()">事件</div>

function show(){

alert('事件處理');

}

變種:超鏈接內直接寫彈出

<ahref="javascript:alert('')"

 

2、通過匿名函數處理

vard=document.getElementById('a');

d.onclick = function(){

alert('事件處理');

}

 

3、for某個id,時機是,在onclick事件時觸發

<scriptfor="abc" event="onclick">

alert('事件處理');

</script>

 

 

禁掉鼠標右鍵,或是使用右鍵彈出某個窗口

必須要對這個事件return false;

<body οncοntextmenu= "return show()">

<script>

functionshow(){

alert('點擊右鍵彈出');

returnfalse;

}

</script>

</body>

 

禁止複製

<bodyonselectstart="return false">

</body>

 

 

常用事件加載,卸載

<bodyοnlοad="alert('你好,世界')">           //進入頁面時輸出

</body>

<bodyοnunlοad="alert(正在退出)">                  //關閉頁面時輸出

</body>

 

 

關於彈窗

alert()方法時window對象下面的方法

window.alert();

 

關閉窗口方法

window.close();

 

禁用超鏈接

<ahref="www.baidu.com" οnclick="return false">百度</a>

 

 

確認消息框 comfirm()

<a href="www.baidu.com" οnclick="return confirm('你確定刪除/訪問百度?')">百度</a>

實際確定返回true,取消返回false

 

moveBy移動元素窗體,指定窗口在原有位置移動

<button οnclick="st()"></button>

function st(){

window.moveBy(200,200);

}

 

moveTo 移動窗口,直接移動到指定位置

 

 

打印

<buttonοnclick="window.print()"></button>

 

prompt

彈出窗口取得用戶輸入值,賦值給str

var str =window.prompt('輸入數值','測試');

alert(str);         //將取得的值彈出

 

//創建img標籤賦值給對象

var img = document.createElement('img')

 

 

彈出新窗口

open

<script>

//location是否顯示地址欄,toolbar是否顯示工具欄

window.open('close.html','aaa','location=no','toolbar=yes');

</script>

 

 

調整窗口大小

<buttonοnclick="window.resizeBy(100,100)">調整窗口</button>  //每次點擊調整一次

resizeTo            //直接調整爲對應大小

 

 

滾動窗口

scrollBy

<buttonοnclick="scrollBy(0,20)">滾動</button>   //每點擊一次滾動一次

scrollTo       //直接移動至,可以作爲錨點

 

 

 

 

 

window對象的方法

 

setTimeout()          定時執行,在2秒後,將背景顏色變爲orange

      varone=setTimeout(function(){

            window.document.bgColor='orange';

      },2000);

 

clearTimeout()        清除週期性執行

clearTimeout(one)

 

跳轉

location

window.location.href="http://www.baidu.com";

 

 

setInterval(函數,時間)  週期性執行

============每個一秒改變數字==============

<divid="d"style="width:100%;font-size:20;color:red;text-align:center">

0

</div>

<script>

            i=0;

            setInterval(function(){

                  var d =window.document.getElementById('d');

                  d.innerHTML = i;

                  i++;

            },1000)

      </script>

 

 

 

 

clearInterval     清除週期性計時器

==========鼠標放上時開始計時,離開時取消計時

<div id="d" οnmοuseοver="start()"οnmοuseοut="stop()"

style="width:100%;font-size:20;color:red;text-align:center">0</div>

            <script>

                  var i=0;

                  var jsp=null;

                  function start(){

                        jsq=setInterval(function(){

                              vard = window.document.getElementById('d');

                              d.innerHTML= i;

                              i++;

                        },1000)

                  }

                  function stop(){

                        clearInterval(jsq);

                  }

            </script>

 

雙擊後頁面自動滾動,單擊後停止滾動效果

      <bodyοndblclick="start()" οnclick="stop()">

            <script>

                  var s=null;

                  function start(){

                        s=setInterval(function(){

                              window.scrollBy(0,20);

                        },100);

                  }

                  function stop(){

                        clearInterval(s);

                  }

            </script>

 

 

點擊後,容器逐漸向上隱藏

<div id="one"style="width:400px;height:800px;background-color:red"οnclick="show()"></div>

            <script>

                  function show(){

                        setInterval(function(){

                              //找對象

                              vara = $('one');

                              height= parseInt(a.style.height);

                              height-= 20;

                              //解決瀏覽器兼容

                              if(height<=10){    

                                    a.style.display = 'none';

                              }else{

                                    a.style.height = height;

                              }         

                        },50);

                  }

                  function $(id){

                        return window.document.getElementById(id);

                  }

            </script>

 

 

飄動框效果

自動獲得瀏覽器寬高

body.clientHeight         body.clientWidth

===============piaodong.html=============

<div id="img"

style="width:309px;height:350px;position:absolute;top:0;left:0"

οnmοuseοut="start()"οnmοuseοver="stop()"><img src="11.jpg"/></div>

      <script>

            var ts = 5;

            var ls = 5;

            var jsq = null;

            //週期性執行

            function start(){

                  //進行週期執行方法,並賦值給jsq,在關閉計時直接clearIntval(jsq)

                  jsq =setInterval(function(){

                  //找到對象img,將元素中img id的div轉爲js當中的對象

                  var img =window.document.getElementById('img');

                  //由於top有單位,所以強制取整

                  var _top = parseInt(img.style.top);

                  var _left =parseInt(img.style.left);

 

                  //把得到的t和l分別各加5個像素,由於超過頁面的寬或者高後需要變成減去5個像素,所以說單獨的將其5這個單位賦值給變量,待會l或和t如果超過頁面寬高,則ls或ts*-1  即完成了  當前高-5的操作

                  //document.body.clientWidth是獲得當前客戶端當中body體的寬

                  //document.body.clientHeight是獲得高

                  //因此body寬減圖片的寬,即得到圖片最寬能移動到的位置

                  if(_top>=(document.body.clientHeight-350)||_top<0){

                        //當達到限定位置的時候將其反轉

ts = ts*-1;

                  }

                  if(_left>=(document.body.clientWidth-309)||_left<0){

                        ls = ls*-1;

                  }

                  _top +=ts;

                  _left +=ls;

                  //把新的top和left位置重新賦給新對象

                  img.style.top =_top+'px';

                  img.style.left =_left+'px';

            },20);

      }

      //執行開始飄動

      start();

      function stop(){

            clearIntval(jsq);

      }

</script>

 

 

關閉父窗體時,子窗體也跟着關閉(當在父窗體中調用open方法時,引用子窗體)

parent.html            child.html

通過closed屬性判斷子窗體是否關閉,若未關閉,這關閉(當子窗體關閉時,closed 值爲true)

==============parent.html=======

<bodyοnunlοad="c()">

<script>

var w =window.open('child.html','aa');//打開新頁面的同時,將其作爲對象賦值給w

functionc(){

if(!w.closed){

w.close();

}

}

</script>

在子窗體中引用父窗體對象window.opener

=================child.html========

<body>

            <buttonοnclick="red()">紅</button>

            <buttonοnclick="green()">綠</button>

            <buttonοnclick="blue()">藍</button>

            這是子窗體

            <script>

                  var o = window.opener.document;

                  function red(){

                        o.bgColor= 'red';

                  }

                  function green(){

                        o.bgColor= 'green';

                  }

                  function blue(){

                        o.bgColor= 'blue';

                  }

            </script>

      </body>

 

 

瀏覽器下方滾動文字

window.defaultStatus

===================defaultStatus.html========

            <script>

                  //在裏面做一個循環,讓循環數小於j值,來產生空格這個字符串

                  var j = 0;

                  var ds = 1;            

                  setInterval(function(){

                        var str = '滾動文字';

                        j = j+ds;   

                        if(j>=200||j<0){

                              ds= ds*-1;

                        }

                        var t = '';

                        for(i=0;i<=j;i++){

                              t= t+' ';

                        }

                        str = t+str;

                        window.defaultStatus = str;

                  },100);

            </script>

 

 

window.location對象

location.html

屬性:href   跳轉

window.location.href='http://www.baidu.com';可以使用setTimeout()    定時跳轉

方法:   replace() 頁面替換

window.location.replace('http://127.0.0.1/bbs');

 

reload()      頁面重載

//使用重載顯示時鐘

<script>

                  var d=new Date();

                  document.write(d);      

                  setTimeout(function(){

                        window.location.reload();

                  },1000);

            </script>

 

 

 

window.history

window.history.back()         //後退方法,後退到表單時,能記住提交時的表單值

window.history.forward()    //前進方法

window.history.go(2)          //前進2頁

window.history.go(-2)        //後退2頁

 

 

 

 

 

 

 

 

 

 

 

BOM3

屏幕對象

 

分辨率

      document.write(screen.availHeight+'<br />'); //實際像素高

      document.write(screen.availWidth+'<br/>');         //實際像素寬

      document.write(screen.colorDepth+'<br/>');        //顏色深度

      document.write(screen.height+'<br/>');               //高

      document.write(screen.width+'<br/>');                 //寬

 

瀏覽器

document.write(navigator.appCodeName+'<br/>');

document.write(navigator.appVersion+'<br/>');

document.write(navigator.appName+'<br/>');

document.write(navigator.platform+'<br/>');

document.write(navigator.userAgent+'<br/>');

 

=============判斷瀏覽器版本方法============

      var str=navigator.appVersion;

      //split(';',str);  

      var arr=str.split(';');    

      if(arr[1]==' MSIE 7.0'){          

            alert('你的瀏覽器版本過低,可能會泄漏你的用戶隱私');

      }

 

 

其他對象

 

=====加入收藏夾======

<ahref="javascript:window.external.AddFavorite('http://www.baidu.com','百度')">把本站加入收藏</a>

 

設爲首頁

this.style.behavior=’url(#default#homepage)’;

this.setHomePage(’http://www.indexseo.cn/’);"

 

複製代碼      剪切板對象

window.clipboardData.setData('text',d.innerHTML);

 

選中的文檔

document.selection.createRange()

     

vard=document.selection.createRange();

            alert(d.text);

 

 

框架對象

7種方法找對象

通過名稱找到對應的   document.frames[‘main’]

通過名稱對象   document.frames.main.document

通過item    document.frames.item(2)

通過item("")document.frame.item(“q”)

直接通過名稱window.top.main

通過frames數組的個數 window.top.frame[2]

通過top數組 window.top[‘main’];

 

得到當前窗體的父框架對象

window.parent.frames;

 

得到當前窗體父框架的父框架對象

window.parent.parent.frames;

 

得到最上級父框架對象

window.top.frames;

 

 

事件對象

把事件來源元素轉爲對象

=========srcElement.html========

<div οnmοuseοver="show()">事件來源元素window.event.srcElement</div>

function show(){

      var t = window.event.srcElement;

t.style.background= 'gray';

}

 

獲得鍵盤碼

==========keyCode.html========

事件:onkeydown

對象:event.keyCode

      <bodyοnkeydοwn="haha()">

            <script>

            function haha(){

                  if(event.keyCode==27){

                        window.close();            //按esc鍵關閉瀏覽器

                  }         

            }

            </script>

      </body>

 

瀏覽器彈出的連接地址是絕對地址

img.src

========2個函數實現截取瀏覽器中url的文件名========

function parseImg(str){                      

      var arr=str.split('/');

      return arr.pop();

}

 

function parseImg(str){

      varpos=str.lastIndexOf('/')+1;

      return str.substr(pos);

}

 

 

 

 

取消事件的層級關係

==========具有層級關係,同時彈出=======

<body οnclick="alert('1')">

<imgsrc="" οnclick="alert('2')" />

</body>

=========使用cancelBubble取消層級關係=====

<body οnclick="alert('1')">

<imgsrc="1.jpg" οnclick="show()" />

<script>

functionshow(){

event.cancelBubble= true;

alert('取消層級關係後');

}

</script>

</body>

 

 

事件返回值屬性

window.event.returnValue = false;

oncontextmenu = "show()"

 

 

onbeforeunload      //在頁面關閉前或刷新後執行的事件

οnbefοreunlοad="window.event.returnValue='請小心'"

 

<body οncοntextmenu="show()"onselectstart="show()"

οnbefοreunlοad="window.event.returnValue='請小心'">

            <script>

                  function show(){

                        return window.event.returnValue=false;

                  }

            </script>

</body>

 

取得鼠標座標

event.clientX,event.clientY

      <bodyοnmοusemοve="show()">

            <script>

                  function show(){

      window.status ='x:'+window.event.clientX+';y:'+window.event.clientY;

                  }

            </script>

      </body>

=========鼠標後面跟一張圖片===========

<body οnmοusemοve="show()">

            <img src="22.jpg" id="img" />

            <script>

                  function show(){

                  var x =event.clientX;

                  var y =event.clientY;

                  var img =document.getElementById('img');

                  img.style.position ='absolute';

                  img.style.left = x;

                  img.style.top = y;

                  }

            </script>

</body>

 

 

 

ctrl、alt快捷鍵

window.event.ctrlKey

window.event.altKey

window.event.shiftKey

 

 

Dom1

window.document.all

=====通過document.all遍歷所有標籤=========

//注意className的訪問方法,既可以以下標形式也可以以對象屬性形式訪問,如

//document.all[i].className或document.all[i].type

for(i=0;i<document.all.length;i++)

      {                     

            document.write(document.all[i]['className']);

      }

=====獲得頁面所有標籤對象==========

<script>

var t=window.document.all;

for(a in t){

alert(t[a].tagName);

}

</script>

 

document獲取元素的既有方法

getElementById                 //按id查找

 

getElementsByTagName     //按標籤名查找

var t=document.getElementsByTagName('div')

t[0].innerHTML = '通過這個方法改變標籤的內容';

 

通過name來查找                                   getElementsByName   

var t = document.getElementsByName('username');

 

如何自定義以下方法

通過class來查找

通過屬性來查找$(input['type=text'])

 

自定義$()函數,進行四種方式查找

#id,

.className,,

input[username],        //表單標籤的name

input[type=text]

 

================================================

      <script>

                  var t = $('.y');

                  alert(t[0].innerHTML);

                  function $(who){

                        var flag = who.substr(0,1);

                        var name = who.substr(1);

                        //通過name來查找標籤的方法的正則

                        var regexName = /(\w+?)\[(\w+?)\]/;

                        //通過type來查找標籤的方法的正則

                        var regexType = /(\w+?)\[(\w+?)=(\w+?)\]/;

                        //存儲正則匹配內容的變量

                        var preArr = null;

                        if(flag == '#'){

                              returndocument.getElementById(name);

                        }else if(flag == '.'){

                              vararr = new Array();

                              varall = document.all;

                              vari = 0;

                              for(ain all){

                                    if(all[a].className == name){

                                          arr[i]= all[a];

                                          i++;

                                    }

                              }

                              returnarr;

                        }

                        //regexName

                        if(preArr = regexName.exec(who)){

                              vartag = preArr[1];

                              varname = preArr[2];

                              //獲取此類標籤對象

                              varobj = document.getElementsByTagName(tag);

                              vararr = [];

                              vari = 0;

                              //遍歷標籤對象,尋找name對應需求name的標籤對象

                              for(ain obj){                                

                                    if(obj[a].name == name){

                                          arr[i]= obj[a];

                                          i++;

                                    }

                              }

                              returnarr;

                        }

                        //regexType

                        if(preArr = regexType.exec(who)){

                              vartag = preArr[1];

                              vartype = preArr[2];

                              varvalue = preArr[3];

                              varall = document.all;

                              vararr = [];

                              vari = 0;

                              for(ain all){

                                    if(all[a][type]==value){

                                          arr[i]= all[a];

                                          i++;

                                    }

                              }

                              returnarr;

                        }else{

                              returndocument.geElementByTagName(who);

                        }

                  }

            </script>

================================================

 

forms對象

document.forms

 

images

 

links

 

getAttribute獲得屬性值

 

文檔流

跟document.write有關

document.write如果直接在頁面當中使用的話,追加內容至文檔中;

如果document.write在函數裏面使用,因爲函數是一個新的容器,所以它會關閉當前窗體,開啓一個新的文檔進行寫入。url不會發生變化,文檔內容發生變化

 

 

document.close()   關閉文檔流,在兩次write之間關閉,則兩次write都是重寫而不是追加

function go(){

      document.write('第一次函數體內寫入');

      document.close();

      document.write('第二次函數體內寫入');

}

 

 

創建元素

var img = document.createElement('img');

img.src='1.jpg';

img.title='圖片';

//分配子元素

document.body.appendChild(img); //像body中分配img子對象

 

//刪除元素

document.body.removeChild()

 

創建元素時也可以給元素指定事件

div.οnclick=function(){

            var d=document.getElementById('lsjr');

            document.body.removeChild(d);                           

      }

 

 

QQ空間瀏覽圖片效果

在指定事件源上面產生一個事件,觸發一個事件處理程序,在事件處理程序當中找對象該屬性

點擊圖片,在上面創建一個元素,DIV100%,height:100%,背景是黑色透明

 

 

 

 

 

 

 

 

 

Dom2

多選文件上傳框,點擊增加或刪除

            <button οnclick="add()">增加</button>

            <button οnclick="del()">刪除</button>

            <div id="f">

                  <inputtype="file" name="f[]" />   

            </div>

            <script>

                  function add(){

                        var d = document.getElementById('f');

                        var input =document.createElement('input');

                        input.type='file';

                        input.name='f[]';

                        d.appendChild(input);

                  }

 

                  function del(){

                        var d = document.getElementById('f');

                        var input = document.getElementsByTagName('input');

                        d.removeChild(input[input.length-1]);

                  }

            </script>

 

 

document其他屬性

document.title

document.bgColor

for(a in document){

document.write(a+''+document[a]+'<br />');

}

 

 

回頂部效果

<div οnclick="gotop()" id="img"style="width:140px;height:140px;

position:fixed;right:2%;bottom:10%">

      <imgsrc="zero.jpg" />

</div>

      <script>

            function gotop(){

                  window.scrollTo(0,0);

            }

      </script>

 

 

打開頁面廣告圖片自動滾出效果

scrollup.html

<div id="one"style="width:140px;height:140px;position:fixed;

right:5px;bottom:-140px">

      <imgsrc="zero.jpg" />

</div>

<script>

            var jsq = null;

            function t(){

                  jsq =setInterval(function(){

                        var t = document.getElementById('one');

                        var y = parseInt(t.style.bottom);

                        y++;

                        if(y>0){

                                    clearInterval(jsq);

                              }

                              t.style.bottom= y+'px';

                        },50);

                  }

                  t();

            </script>

 

文檔樹

parentElement()     訪問父元素

parentNode()         訪問父節點

childNodes()           訪問子節點;可以得到一個節點的所有子節點的數組

firstChild()              進入節點的第一個子節點

lastChild()              最後一個子節點

nextSibling()          進入下一個節點

previousSibling()    找到節點的前一個節點

 

                  var p =t.parentNode.parentNode.lastChild.lastChild;

                  alert(p.innerHTML);

 

多選框的全選/全不選/反選

checkbox的選中狀態是根據元素的.checked決定的.checked=true則選中

            <input type="checkbox" name="f[]"value="1" />多選框<br />

            <input type="checkbox" name="f[]"value="1" />多選框<br />

            <input type="checkbox"οnclick="show(this.checked)" />

            <button οnclick="qx()">全選</button>

            <button οnclick="qbx()">全不選</button>

            <button οnclick="fx()">反選</button>

            <script>

                  function qx(){

                        var chk =document.getElementsByName('f[]');

                        for(i=0;i<chk.length;i++){

                              chk[i].checked=true;

                        }

                  }

                  function qbx(){

                        var chk =document.getElementsByName('f[]');

                        for(i=0;i<chk.length;i++){

                              chk[i].checked= false;

                        }

                  }

                  function fx(){

                        var chk = document.getElementsByName('f[]');

                        for(i=0;i<chk.length;i++){

                              if(chk[i].checked){

                                    chk[i].checked = false;

                              }else{

                                    chk[i].checked = true;

                              }

                        }

                  }

                  function show(set){

                        var chk =document.getElementsByName('f[]');

                        for(i=0;i<chk.length;i++){

                              chk[i].checked= set;

                        }

                  }

            </script>

 

js實現滑動選項卡

<html>

      <head>

            <style>

                  #nav{

                        width:200px;

                        height:70px;

                        border:1px solid #ccc;

                  }

                  #nav li{

                        float:left;

                        width:63px;

                        height:70px;

                        line-height:70px;

                        text-align:center;

                  }

                  .bg{

                        background:gray;

                  }

                  #content .dis{

                        display:none;

                  }

            </style>

      </head>

      <body>

            <script>

                  functionshow(index,obj){

                        var div = obj.parentNode.parentNode;

                        var nav = obj.parentNode.childNodes;

                        var content = div.lastChild.childNodes;

                        for(i=0;i<nav.length;i++){

                              if(index== i){

                                    nav[i].className = 'bg';

                              }else{                         

                                    nav[i].className = '';

                              }

                        }

                        for(i=0;i<content.length;i++){

                              if(index== i){

                                    content[i].className = '';

                              }else{                         

                                    content[i].className = 'dis';

                              }

                        }

                  }

            </script>

            <div id="nav">

                  <liclass="bg" οnmοuseοver="show(0,this)">標籤一</li>

                  <liοnmοuseοver="show(1,this)">標籤二</li>

                  <liοnmοuseοver="show(2,this)">標籤三</li>

            </div>

            <div id="content">

                  <div>

                        <li>標籤一內容一</li>

                        <li>標籤二內容一</li>

                        <li>標籤三內容一</li>

                  </div>

                  <divclass="dis">

                        <li>標籤一內容二</li>

                        <li>標籤二內容二</li>

                        <li>標籤三內容二</li>

                  </div>

                  <divclass="dis">

                        <li>標籤一內容三</li>

                        <li>標籤二內容三</li>

                        <li>標籤三內容三</li>

                  </div>

            </div>

      </body>

</html>

 

form對象

 

屬性action        method

方法focus()得到焦點       submit()提交     reset()重置

=======配合submit()實現button提交===========

<form action="http://www.baidu.com"method="post">

<inputtype="text" name="username" value="t" />

<inputtype="text" name="g" />

<buttonοnclick="su()">提交</button>

<buttonοnclick="back()">返回焦點</button>

</form>

<script>

function su(){

var frm =document.forms(0);

frm.submit();

}

 

function back(){

var frm =document.forms(0);

frm.username.focus();

}

</script>

 

禁止提交

<input type="submit" value="提交" οnclick="return false" />

 

js自定義提交按鈕--驗證和檢測

<input type="submit" value="提交" οnclick="return check()" />

function check(){

var frm = document.ta;

var str = '';

var flag=true;

if(frm.username.value.length<6){

frm.username.focus();        //哪個地方有錯,哪個地方獲得焦點

str = '用戶名過短\n';

flag =false;

}

if(frm.username.value.length>15){

str = '用戶名過長\n';

flag =false;

}

if(frm.password.value!=frm.repassword.value){

frm.password.focus();

str+='兩次密碼不一致\n';

flag =false;

}

//驗證郵箱正則

var regex =/\w+@([a-zA-Z0-9]+\.){1,3}(com|cn|net)/;

if(!regex.exec(frm.email.value)){

str+='郵箱格式不正確';

flag =false;

}

 

if(flag){

return true;

}else{

alert(str);

returnfalse;

}

}

 

===========失去焦點即驗證該處合法性=============

<input type="text" name="username"οnblur="checkUser()" />

<div id="r"></div>

function checkUser(){

document.forms[0].username.focus();

vard=document.getElementById('r');

d.innerHTML='用戶名錯誤';

}

 

 

selectedIndex

 

根據不同的option選項顯示不同的圖片

<select οnchange="show(this.selectedIndex,this)">

<optionvalue="ren_h_1.gif">上</option>

<optionvalue="ren_q_1.gif">下</option>

<optionvalue="ren_l_1.gif">左</option>

<optionvalue="ren_r_1.gif">右</option>

</select>

<img src="images/ren_q_1.gif" id="s" />

function show(index,obj){

var img =document.getElementById('s');

img.src ='images/'+obj.options[index].value;

}

 

==========實現qq中添加好友效果=========

//左側移到右側即在左側將標籤刪除

<select id="one" size="10">

                  <optionvalue="bj">北京</option>

                  <optionvalue="sh">上海</option>

                  <optionvalue="tj">天津</option>

            </select>

            <button οnclick="yidong()">右移</button>

            <select id="two" size="10">

            </select>

            <script>

                  function yidong(){                   

                        var one=document.getElementById('one');

                        var two=document.getElementById('two');

                        var op=one.options[one.selectedIndex];

                        two.add(newOption(op.text,op.value));

                        one.removeChild(op);

                  }

            </script>

 

微博發表新聞效果

<html>

      <head>

      </head>

      <body>    

      <divid="news">慶祝哥分手兩週年,哥打算開始把妹了,不論學生同事全下手 </div>

      <formaction="http://www.baidu.com">

            <textarea name="weibo" id="wei"cols="60" rows="10" οnclick="gaibian()"οnblur="news()" οnkeyup="gaibian()"></textarea>

            <button οnclick="sub()">發表</button>

      </form>

      <script>

            var total=140;

            function sub(){            

                  ys=sz();

                  if(ys<0){

                        setInterval(function(){

                              varweibo=document.getElementById('wei');

                              if(weibo.style.background=='red'){

                                    weibo.style.background='#ffffff';

                              }else{

                                    weibo.style.background='red';

                              }                                 

                        },300);

                  }else{                   

                        document.forms[0].submit();

                  }

            }

            function gaibian(){

                  vard=document.getElementById('news');       

                  ys=sz();

                  if(ys>0){

                        d.innerHTML='你還可以輸入'+ys+'個字';

                  }else{

                        d.innerHTML='<fontcolor="red">你超出了'+(-ys)+'個字</font>';

                  }

            }

            function news(){               

                  vard=document.getElementById('news');

                  d.innerHTML='兩年了,哥單了兩年身了,哥要變身了。';

            }

            function sz(){

                  varweibo=document.getElementById('wei');

                  varys=total-weibo.innerHTML.length;

                  return ys;

            }

      </script>

      </body>

</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ajax

javascript中的一個對象

 

6個屬性和6個方法

 

作用:

通過javascript來向服務器提交數據,或者通過js來接收服務器上面返回的數據

無刷新的向服務器端發送和請求數據

 

客戶端有向服務器的請求,直接交給ajax,客戶端不需要等待數據的處理,不需要跳轉,可以繼續執行操作。服務器處理完成即返回給ajax,ajax顯示給用戶

 

方法

abort() 停止當前請求

getAllResponseHeaders()    把HTTP請求的所有響應作爲鍵/值對返回

getAllResponseHeader()           返回指定首部串值

 

open()

send()

發送數據使用對象.open打開,用send發送,對post和get都有效,但如下方法post會失效,缺少setRequestHeader('Content-Type','application/x-www-form-urlencoded');

發送數據

======get傳參方法===========

      var ajax = new XMLHttpRequest;

      //alert(ajax);                彈出對象類型,說明支持ajax

      ajax.open('get','fopen.php?username=somebody');      //建立握手

      ajax.send(null);            //發送請求

 

=======post傳參方法==========

var ajax = new XMLHttpRequest;

ajax.open('post','fopen.php');

      ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

      ajax.send('username=somebody&password=pwd');

 

接收數據

onreadystatechange

readyState 請求的狀態

5個狀態碼,0,1,2,3,4                4代表完成

狀態     描述

0    請求未初始化(在調用 open() 之前)

1    請求已提出(調用 send() 之前)

2    請求已發送(這裏通常可以從響應得到內容頭部)

3    請求處理中(響應中通常有部分數據可用,但是服務器還沒有完成響應)

4    請求已完成(可以訪問服務器響應並使用它)

      ajax.onreadystatechange=function(){

            if(ajax.readyState==4){

                  alert(ajax.responseText);

            }else{

                  alert('顯示進度條');

            }

      }

 

 

responseText

responseXML

status   服務器HTTP狀態碼

statusText  HTTP狀態碼的相應文本

 

 

ajax發送數據,接收頁面不存在處理方法

ajax.onreadystatechange=function(){

            if(ajax.readyState==4){

if(ajax.status==200){          //狀態碼

alert(ajax.responseText);    

}

            }else{

                  alert('顯示進度條');

            }

      }

 

 

HTTP常用狀態碼

1XX           接收成功,需要繼續處理

2XX           成功

200            執行成功

3XX           轉發,重定向

4XX           請求錯誤

401            當前請求需要驗證用戶

403            服務器已理解請求,拒絕執行

404            頁面未找到

5XX           服務器內部錯誤

503            臨時服務器維護或者過載,服務器當前無法處理請求

 

 

 

 

ajax實現數據庫查詢

==============form.html================

<formaction="mysql.php" method="post">

            <inputtype="text" name="username" οnblur="check()"/>

            <divid="tips"></div>

      </form>

      <script>

            functioncheck(){

                  var ajax = new XMLHttpRequest;

                  var v = document.forms[0].username.value;

                  ajax.open('get','mysql.php?username='+v);

                  ajax.send(null);

                  ajax.onreadystatechange=function(){

                        if(ajax.readyState==4){

                              //如果執行成功

                              if(ajax.status==200){

                                    tips(ajax.responseText);

                              }

                        }

                  }

            }

            functiontips(data){

                  document.getElementById('tips').innerHTML=data;

            }

=============mysql.php===================

try{

      $dbh = newPDO('mysql:host=localhost;dbname=mybbs','root','123456');

      $dbh->query('set names utf8');

      $stmt = $dbh->prepare('select * frombbs_user where username=?');

      $stmt->bindParam(1,$username); 

      //iconv編碼轉換

      //@param1 源編碼

      //@param2 目標編碼

      $username =iconv('gbk','utf-8',$_GET['username']);

      $stmt->execute();

      if($stmt->rowCount()){

            echo'<font color="red">用戶名已存在,不可以註冊</font>';

      }else{

            echo'<font color="green">可以註冊</font>';

      }

}catch(PDOException$e){

      echo '數據庫連接失敗:'.$e->getMessage();

      exit;

}

 

 

ajax庫

 

//微軟系列ie7及以下版本支持的ajax對象

'Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'

 

//新建一個空對象,新建空對象後,向空對象裏面追加屬性和方法,即完成對這個對象的功能定義,使用時,直接調用裏面的方法來用即可

var aj=newObject();

//創建ajax對象的一個成員方法

aj.create=function(){

      if(window.XMLHttpRequest){        

            varajax=new XMLHttpRequest;

            returnajax;

      }else{

            vararr=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];        

            //ajax聲明成空,避免下面再聲明一次

            varajax=null;

            //i=0獲得數組的長度,進行循環

            for(i=0;i<arr.length;i++){

                  //償試try...catch..如果遇到錯誤,自動拋出

                  try{

                        //由於微軟系列的名字是在數組裏面,需要實例化的是ActiveXObject('Microsoft.XMLHTTP')

                        ajax=newActiveXObject(arr[i]);

                        returnajax;

                  }catch(e){             

                        ajax=false;

                  }

            }

      }

}

//得到ajax對象

aj.request=aj.create();

//get方法

aj.get=function(url,func){ 

      aj.request.open('get',url);

      aj.request.send(null);

      //接收數據,讓回調函數func來處理返回的數據

      aj.handler(func);

}

//post方法

aj.post=function(url,data,func){    

      aj.request.open('post',url);

      aj.request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

      aj.request.send(data);

      aj.handler(func);

}

aj.handler=function(func){

      aj.request.onreadystatechange=function(){           

            if(aj.request.readyState==4){

                  if(aj.request.status==200){

                        //回調函數func

                        func(aj.request.responseText);

                  }

            }

      }

}

 

 

ajax註冊

============reg.html=============

      <head>

            <scriptsrc="ajax.js"></script>

      </head>

      <body>

            <divid="ts"></div>

            <divid="content">      

            </div>

            <formname="frm">

                  <input type="text"name="username" />

                  <input type="password" name="password"/>

                  <button οnclick="reg()">註冊</button>

            </form>

            <script>

                  function reg(){

                        varusername=document.frm.username.value;

                        varpassword=document.frm.password.value;                    aj.post('reg.php','username='+username+'&password='+password,function(data){          

                              var ts=document.getElementById('ts');

                              ts.innerHTML=data;

                              //再次得到內容,把用戶發表的內容放到content裏面去

                              var username=document.frm.username.value;

                              var password=document.frm.password.value;

                              varcontent=document.getElementById('content');

                              content.innerHTML+='用戶名:'+username+'密碼:'+password+'<br />';

                        });

                  }

            </script>

      </body>

============reg.php=================

try{

      $pdo=newPdo('mysql:host=localhost;dbname=44demo','root','liwenkaihaha');

      $pdo->query('set names utf8');

      $stmt=$pdo->prepare('insert into44demo_user(username,password,createtime,createip) values(?,?,?,?)');

      $stmt->bindParam(1,$username,PDO::PARAM_STR);

      $stmt->bindParam(2,$password,PDO::PARAM_STR);

      $stmt->bindParam(3,$time,PDO::PARAM_INT);

      $stmt->bindParam(4,$ip,PDO::PARAM_INT);

      $username=$_POST['username'];

      $password=$_POST['password'];

      $time=time();

      $ip=ip2long($_SERVER['REMOTE_ADDR']);

      $stmt->execute();

      if($stmt->rowCount()){

            echo'註冊成功';

      }else{       

            echo'註冊失敗';

      }

}catch(PDOException$e){

      echo $e->getMessage();

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSON

javascript對象快速聲明

PHP輕量級數據處理對象

json_encode()           //把數組變成json字符串,使用json時用utf8字符集編碼

json_decode()           //把json字符串變成php對象,傳入第二個參數爲true變爲php數組

 

================json.php=================

$arr =array('username'=>'管理員','password'=>'abc','createtime'=>123123124);

echojson_encode($arr);

=================cljson.html==================

      <head>

            <scriptsrc="ajax.js"></script>

      </head>

      <body>

            <divid="a"></div>

            <divid="b"></div>

            <divid="c"></div>

            <script>

                  aj.get('json.php',function(data){

                        //將php轉換出的json變爲標準js的json格式,php的格式鍵名帶引號

                        varobj = eval('('+data+')');

                        document.getElementById('a').innerHTML=obj.username;

                        document.getElementById('b').innerHTML=obj.password;

                        document.getElementById('c').innerHTML=obj.createtime;

                  })

            </script>

      </body>

 

 

ajax跨域(面試必考)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:

 

Javascript嚴格區分大小寫,函數,變量,關鍵詞均區分大小寫

 

javascript中追加數組元素必須傳入下標值

 

Javascript中的分號可有可無

 

不知道的屬性和方法可以for...in出來

 

css當中的屬性如font-colorjs當中把橫線去掉,橫線後的第一個首字母大寫

 

javascript中的正則表達式沒有引號,直接使用定界符隔開

如:var regex=/(\w+?)\[(\w+?)=(\w+?)\]/

 

javascriptdocument對象中html標籤的classclassName

 

瀏覽器彈出的連接地址是絕對地址,驗證方法

<imgid="img" src="images/11.jpg" />

<script>

var t =document.getElementById('img');

alert(img.src);

</script>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章