JS初識

来源:https://www.cnblogs.com/yeziblogs/archive/2022/04/28/16203698.html
-Advertisement-
Play Games

567網頁的組成: html:超文本標記語言,網頁結構層. CSS:層疊樣式表,網頁的樣式. Javascript:腳本語言,規定了網頁交互行為. 什麼是JS? JS是基於對象和事件驅動的解釋型腳本語言. JS特點: 基於對象:JS中萬物皆對象.JS中的任何內容都由一個對象來描述.任何操作都是由對象 ...


  • 567網頁的組成:

    • html:超文本標記語言,網頁結構層.

    • CSS:層疊樣式表,網頁的樣式.

    • Javascript:腳本語言,規定了網頁交互行為.

  • 什麼是JS?

    • JS是基於對象和事件驅動的解釋型腳本語言.

    • JS特點:

      • 基於對象:JS中萬物皆對象.JS中的任何內容都由一個對象來描述.任何操作都是由對象的方法(函數)來進行描述.

      • 事件驅動:JS可以直接通過用戶的操作做出響應,而無需通過伺服器響應.

      • 解釋型腳本語言

         

  • JS的作用

    • 頁面的交互

    • 前端和後端的交互.–三節點–四階段

  • JS的歷史:

    • 1995年,網景公司開發了第一款商用瀏覽器。

    • 需要在瀏覽器設計一個專門用來做表單驗證的語言。布蘭登.愛奇花了10天寫了第一個js版本。

    • 之所以JS命名為javascript主要的原因:網景和sun公司合作關係,有因為java非常火,搭了順風車,其名為javascript。

    • 同年微軟開發了IE3.0,嵌入了克隆版的JS–JSript.後期由於IE是windows內置瀏覽器,後來網景就慢慢沒落最後到倒閉。

    • 原來網景公司Mozilla團隊後來將瀏覽器內核開源,開源之後他們成立了Mozilla組織,後期開發了火狐瀏覽器。

    • 後來因為瀏覽器之爭,ECMA組織(歐洲電腦協會)組織各個計算廠商制定了JS的語法標準:ECMAScript.

  • JS的組成:

    • ECMAScript:規定了JS語法標準和常用對象。

    • DOM:(document object model)文檔對象模型

    • BOM:(browser object model)瀏覽器對象模型

 

1.什麼是js,js的特點是什麼?

基於對象和事件驅動的解釋型腳本語言.
特點:
基於對象
事件驅動
解釋型腳本語言.

 

2.js的組成有哪些?

ECMAScript:規定了JS的語法規範.
DOM:document object model 文檔對象模型
BOM:browser object model 瀏覽器對象模型.

 

3.請說出js的三種引入方式,請分別舉例闡述?

行內引入:通過標簽的事件屬性引入
<div onclick="aleart(1)"></div>
內部引入:在script標簽的內部引入js代碼
<script>
`   alert(2);
</script>
外部引入:
<script src="./外部的js文件.js"></script>
​

 

4.談談你對程式調試的理解,可以使用那些方法調試程式?

程式調試:當程式運行時,用於檢測程式運行過程的一種方式.
1.alert():警告框
2.console.log():控制台輸出數據
3.document.write():在文檔視窗中輸出(寫入數據)
    註意:正常文檔流中輸出可以正常顯示,文檔載入完輸出會替換原文檔內容.
​

 

5.變數的聲明方式有哪些?並舉例說明?

1.先聲明後賦值
var a;
a =10;
2.聲明的同時賦值
var a = 10;
3.同時聲明多個變數
var a = 10,b=11,c = 12;
var a = 10,
 b=11,
 c = 12;
4.連等聲明:
var a = b = 10;

 

6.js數據類型是如何劃分的?

JS數據類型可以分為:
1.基本數據類型
    number
    整數
     小數
     負數
     NaN:not a number (計算結果不是數值.)
        infinity:無窮大
 string
    單引號或者雙引號包裹的內容.
 boolean
        ture
     false
 null:空對象
    undefined:聲明未賦值
2.複雜數據類型(引用數據類型)
    Array:數組
 object:對象
 function:函數

 

7.如何查看字元串的長度,如何獲取字元串的對應下標的字元。

str.length:查看長度
str.charAt(下標)

 

8.變數的作用和命名規則是什麼?

1.只能是數字,字母,下劃線,$組成.
2.不能以數字開頭
3.不能是關鍵字和保留字.
4.建議使用小駝峰命名法.
5.區分大小寫.
6.不能重覆聲明.重覆聲明後面的會覆蓋前面的.

 

9.typeof的返回值有哪些?

typeof的作用是查看變數的數據類型.
格式:
typeof(變數)
typeof 變數
​
typeof返回值:
number-->number
字元串--->string
布爾類型--->boolean
null--->object
undefined-->undefined
 

1.算術運算的隱式轉換規則有哪些?

1.除+號外,其他算數運算符在運算時預設將操作數轉為number,不能轉,結果為NaN.
2.+兩邊只要出現了字元串,就是字元串的拼接操作.
    如果字元串+基本數據類型:字元串拼接.
 字元串+複雜類型:調用複雜類型的toString()獲取字元串格式,在和字元串拼接.

 

2.比較運算的隱式轉換規則有哪些?

1.預設轉為number進行比較.
2.字元串和字元串比較:按位比較ascii碼.
3.NaN和任何內容比較的結果均為false.

 

3.=====的區別?

==:比較的是值是否相等,會進行隱式轉換.
===:比較值和類型時候都相等,不會進行隱式轉換.
​

 

4.如何獲取dom元素,請寫出語法結構。

1.通過dom對象獲取:
    document.getElementById('id');
    document.getElementsByClassName("class")
    document.getElementsByTagName('tag')
2.通過父元素獲取:
    parent.getElementsByClassName('class')
    parent.getElementsByTagName('tag')

 

5.常見的滑鼠事件有哪些,請分別寫出事件名稱及其含義。

1.onclick:滑鼠的點擊事件
2.onmouseover:滑鼠懸浮(移入)
3.onmouseout:滑鼠移出
4.onmousemove:滑鼠移動
5.onmousedown:滑鼠按下
6.onmouseup:滑鼠抬起
7.ondblclick:雙擊
8.oncontextmenu:右擊

6.如何強制轉數值類型,其規則有哪些?

轉換方法:
    1.Number()
    2.parseInt(字元串)/parseFloat(字元串)
​
規則:
1.字元串字面量為數值的正常轉為number,空串為0,其他為NaN.
2.布爾類型:true為1,false為0;
3.null和undefined轉number:null為0,undefined為NaN
4.複雜類型轉number,先調用複雜類型的toString(),再將字元串轉為number.
    []-->toString-->''--->0
    {}--->[object Object]-->NaN

 

7.如何強制轉字元串,其規則有哪些?

轉換方法:
    1.String()
    2.對象.toString()
規則:
    1.基本數據類型轉string,將數據兩邊用雙引號或單引號包裹即可.
 2.複雜類型:
        數組:
            []--->''
            [1]--->'1'
            [1,2]-->'1,2'
        對象:[object Object]

 

8.如何強制轉布爾類型,其規則有哪些?

1.數值轉布爾:0和NaN為false,其他均為true;
2.字元串轉布爾:空串為false,其他均為true;
3.null和undefined轉布爾均為false.
4.複雜類型轉布爾均為true.
 

1.頁面有100個li標簽,如何給這些標簽綁定迴圈事件,請寫出具體的思路和步驟。(也可以用代碼表示)

var oLis = document.getElementsByTagName("li");
​
for(var i = 0;i<oLis.length;i++){
 oLis[i].onclick = function(){
​
 }
}

 

2.請寫出for迴圈的語法格式,並說出其執行流程。

迴圈的特征:
1.迴圈變數
2.迴圈的條件
3.迴圈體
4.更新迴圈變數的值.
​
for(初始化迴圈變數;迴圈的條件;更新迴圈變數的值.){
 迴圈體
}
執行流程:
1.初始化迴圈變數
2.判斷迴圈條件時候滿足,
 滿足執行迴圈體
    不滿足結束迴圈
3.更新迴圈變數的值,繼續從第2步執行.
​

 

3.分別寫出單分支,雙分支,多分支的語法結構.

1.單分支:
if(條件){
 條件滿足執行的代碼
}
​
2.雙分支
if(條件){
    條件滿足執行的代碼
}else{
 條件不滿足執行的代碼
}
3.多分支:
if(條件1){
 條件1滿足執行的代碼
}else if(條件2){
  條件2滿足執行的代碼
}...{
 ...
}else{
 上述條件都不滿足執行的代碼.
}
switch(匹配項){
 case value1:匹配項=value1時執行的代碼;break;
 case value2:匹配項=value2時執行的代碼;break;
 case value3:匹配項=value3時執行的代碼;break;
 case value4:匹配項=value4時執行的代碼;break;
 ...
 default:上述情況都不匹配執行的代碼;
​
}

 

4.如何操作DOM元素的內容?

1.操作表單元素的內容:
    設置:元素.value = 新值
    獲取:元素.value
2.操作閉合標簽的內容:
    設置:元素.innerHTML/innerText = "新值"
    獲取:元素.innerHTML/innerText
    註意:
    (1)元素設置內容會將原內容替換掉.
 (2)innerHTML獲取或者設置內容是可以識別html標簽的.
 (3)innerText只能獲取文本內容,不能識別標簽.

 

5.如何操作DOM元素的屬性?

獲取:元素.屬性名
設置:元素.屬性名= 屬性值
註意:
    (1)元素.屬性名只能獲取或者設置預設屬性,不能操作自定義屬性.
 (2)操作class屬性要通過:元素.className
​
​

 

6.如何操作DOM元素的樣式?

設置樣式:元素.style.樣式名 = 樣式值
註意:
(1)樣式名如果是中劃線命名的,要改成小駝峰命名.
(2)設置的樣式作用在行內.
​

1.break和continue的作用?

break:結束迴圈。
continue:結束本次迴圈,繼續下一次迴圈。

 

2.什麼是對象,對象如何獲取對象的屬性值,如何遍歷對象。

JS中的對象主要用來描述一個事物。一個事物可以有多個屬性和方法。
var obj = {
 //對象的屬性
 name:'zs',
 age:10,
​
 //對象的方法
 study:function(){
​
 }
}
​
獲取對象的屬性方法:
1.對象.屬性名:obj.name
2.對象['屬性名']:obj["name"]
​
遍歷對象:
for(var key in obj ){
 //key:對象的屬性名
 obj[key]:key所對應的屬性值value。
}
​

 

3.什麼是函數,函數的作用是什麼?

函數的定義:函數就是將`具有獨立功能的代碼塊`整合到一起並`命名`,需要的時候`調用`即可。
函數的作用:
(1)提高開發效率
(2)提高代碼的重用率。

 

4.函數聲明方式有幾種,分別寫出其語法結構。

1.關鍵字聲明
function 函數名(){
​
}
2.表達式聲明:
var 函數名= function(){
​
}

 

5.函數的使用場景有哪些?

1.代碼復用
2.事件處理函數。
//事件一旦觸發,就執行函數中的代碼。(自動調用函數。)
//事件處理函數,事件不觸發就不執行。
oBtn.onclick = function(){
​
}
oBtn.onclick = show
function show(){
​
}
3.對象的方法。
var obj = {
 //對象的屬性
 name:'zs',
 age:10,
​
 //對象的方法
 study:function(){
​
 }
}
​

 

6.什麼是形參,什麼是實參。

形參:形式參數,函數聲明時,寫在小括弧中的參數。
function fun(a,b){
​
}
實參:實際參數,函數調用時,實際傳遞的具體參數。
fun(10,15)

 

7.js中函數的參數在聲明函數和調用函數時都有哪些需要註意內容?

1.函數參數的個數問題:
(1)一個參數:聲明和調用時直接寫一個參數即可。
(2)多個確定的參數:
    聲明時,形參按照順序用逗號隔開依次寫到小括弧中即可。
    調用時,實參按照形參的順序依次的傳遞即可。
 函數調用時:實參給形參一一賦值。
(3)參數個數不確定:
    聲明時,形參可以不寫。在函數內部使用arguments來接收所有的實參,並操作實參。
 調用時,實參用逗號分隔傳遞即可。
​
 function sumTotal(){
     var s = 0;
     for(var i = 0;i<arguments.length;i++){
         s+=arguments[i];
     }
​
 }
sumTotal(1,2)
sumTotal(1,2,3)
sumTotal(1,2,3,4)
​
2.參數賦值的問題:
(1)實參和形參個數相等:實參給形參11賦值。
(2)實參比形參多:多餘的實參忽略。
(3)形參比實參多:多餘的形參的值為undefined。
​
3.參數的類型問題:JS所有的屬性類型都可以作為函數的參數,不用顯示聲明函數的形參的數據類型,實參時什麼類型,形參就是什麼類型。
​
​

1.關於函數的返回值,你的理解是什麼?且函數的返回值都有哪些註意的內容。

1.函數的返回值:函數執行所得的結果.
2.註意實現:
    (1)函數中需要使用return關鍵字返回返回值,函數外調用時可以使用變數接收該返回值.
 function fn(){
        return 1
 }
    var res = fn()
 (2)函數執行到return就直接結束函數執行.
 (3)函數沒有return任何內容,預設返回undefined.
 (4)函數一次只能return一個內容.如果返回多個數據,需要使用數組.

 

2.什麼是函數封裝,函數封裝的步驟是什麼?

1.函數封裝就是把一個或多個功能通過函數的方式封裝起來,對外只提供一個簡單的函數介面,通過調用這個函數就能復用封裝的功能.
2.封裝的步驟:
(1)確定函數名稱,見名知意
(2)確定函數的參數,函數中不確定的內容,或者需要傳入的內容使用參數來表示.
(3)按照邏輯或者功能按步驟寫函數體.
(4)將需求結果使用return返回即可.
​
​
數據類型轉換:
Number()-->數組類型的對象.
String()
​

 

3.請寫出獲取非行間樣式的函數

function getStyle(elem,attr){
 if(elem.currentStyle){
     //IE
     return elem.currentStyle[attr];
 }else{
     //標準
     return getComputedStyle(elem)[attr];
 }
}

 

4.this的作用有哪些?

this是函數中的一個特殊對象,在不同的函數中其指向不同.
1.普通函數中,指向window.
function fn(){}
2.事件處理函數中,指向觸發事件的元素.
oDiv.onclick = function(){}
3.對象的方法中,指向當前對象.
{name:zs,study:function(){}}
4.全局作用域下,指向window.

 

5.排他思想的實現思路是什麼?

1.先清空所有相同元素的目標樣式.
2.誰觸發事件,就給誰添加目標樣式.

 

6.什麼是開關效果,開關效果實現思路是什麼?

開關效果的思路:
1.設置一個變數(狀態標識)記錄每種狀態。
2.判斷當前處於什麼狀態,就設置成對應的狀態,並修改狀態標識。

 

7.什麼是作用域,什麼是作用域鏈。js的作用域可以分為哪些?

1.作用域:變數或者是函數的作用範圍.
2.作用域可以分為:
全局作用域:整個script標簽或者最外層 的js代碼的位置.
局部作用域:函數內部.
3.全局變數和局部變數:
全局變數:在全局作用域下定義的變數.
局部變數:在函數內部定義變數.
關係:局部變數只能在函數內部使用,全局變數可以在任意位置都可以使用.
​
4.作用域鏈:JS查找變數的規則
規則:先從當前作用域查找,如果不存在繼續向父級作用域查找,如果找到就直接用,找不到繼續向父級查找,直到找到全局作用域為止,如果還未找到就報錯:xx is not defined

 

8.什麼是js的預解析(變數提升),及js的預解析過程是什麼?

1.預解析是JS解釋器執行JS代碼的一個步驟.
JS解釋器執行JS代碼的步驟可以分為2步:
(1)預解析
(2)代碼從上往下解釋執行.
​
2.預解析過程:
(1)在任何作用於下都有各自的預解析.
(2)預解析解析的目標對象:var出來的變數,和function關鍵聲明的函數.
(3)預解析具體的處理方式:var出來的變數賦值為undefined,function聲明的函數賦值函數體,如果函數同名,保存最後的一個.
​
 

1.什麼是選項卡效果,選項卡效果如何實現?

選項卡效果:一組選項和一組頁面相對應,點擊一個選項顯示相應頁面.
1.分別獲取選項和對應的頁面.
2.對選項進行迴圈事件綁定
3.給迴圈添加自定義屬性index,來標識每個選項下標.
4.在事件迴圈函數中通過this.index來確定操作的頁面的位置.

2.定時器有哪幾種,請分別寫出其語法,並說出他們之間的區別?

1.延時定時器:
語法:id = setTimeOut(函數,延時時間)
作用:延時時間後調用一次函數,只調用一次.
2.間歇定時器:
語法:id = setInterval(函數,間歇時間)
作用:每隔間歇時間,調用一次函數.可以無限調用.
​
3.停止定時器:
語法:clearInterval(id);
​

 

3.請寫出運動函數?

function move(elem,attr,step,target){
 //1.清空定時器,避免定時器疊加.
 clearInterval(elem.timer);
 //2.判斷速度正負.
 step = parseInt(getStyle(elem,attr))<target?step:-step;
 //設置定時器運動
  elem.timer = setInterval(function(){
     //(1)獲取當前attr+step
     var cur = parseInt(getStyle(elem,attr))+step;
     //(2)判斷終點
     if((cur>=target && step>0)||(cur<=target && step<0)){
         cur = target;
         clearInterval(elem.timer);
     }
     //(3)設置attr到elem
     elem.style[attr] = cur+'px';
 },30)
}
 

1.JS的對象可以分為哪些類,併列舉出常見的對象。

1.內部對象
    Number
 String
 Boolean
 Object
 Array
 Function
​
 Math
 Global
​
 Date
 RegExp
 Error
​
2.宿主對象
    Dom
 Bom
3.自定義對象

 

2.Math對象的方法都有哪些並說明其作用?

1.取整方法
    Math.floor():下取整
 Math.ceil():上取整
 Math.round():四捨五入
2.隨機數
    [0,1)隨機數:Math.random()
    [0,n]隨機數:Math.floor(Math.random()*(n+1))
    [m,n]隨機數:Math.floor(Math.random()*(n-m+1)+m)
​
3.數學公式
    Math.max(1,2,3,4,..)
    Math.min(1,2,3,4,...)
 Math.abs()
    Math.sqrt():平方根
 Math.pow(x,y):x^y

 

3.創建時間對象的方法有哪些?

1.系統時間:new Date()
2.自定義時間:
    a.多個參數:new Date(年,月-1,日,時,分,秒)
    b.一個參數:
        new Date(‘年,月,日,時,分,秒’)
        new Date(‘年-月-日,時,分,秒’)
        new Date(‘年/月/日,時,分,秒’)
​

 

4.Date對象的方法有哪些?

oDate.getFullYear()
oDate.getMonth()
oDate.getDate()-獲取天
oDate.getDay()--獲取星期下標
oDate.getHours()--小時
oDate.getMinutes()--分鐘
oDate.getSeconds()--獲取秒
oDate.getTime()--時間戳
​

 

5.字元串對象的方法有哪些(11)?

1.字元串屬性
    str.length
2.查找方法
    str[下標]
    str.charAt(下標)
    str.charCodeAt(下標)
    str.indexOf('字元串'):查看字元串在str中首次出現的下標,如果未找到返回-1
3.變形方法
    str.toUpperCase()
    str.toLowerCase()
4.截取方法
    str.substring(start,end)
    str.slice(start,end)
​
    str.substr(start,length)
5.修改方法
    str.replace(替換什麼,用什麼替換)
    str.split('切分符號')
    str.trim():去除兩邊空格
​
 

1.數組的創建方法有哪些?

1.字面量創建
var arr = [1,2,3]
2.關鍵字new創建
var arr = new Array();//創建空數組
var arr = new Array(3);//長度為3的空數組.
var arr = new Array(1,2,3)//[1,2,3]

 

2.數據的添加元素的方法有哪些?

1.使用下標添加:
arr[i] = value;//給數組下標i的位置添加一個value.也有修改數組元素內容的作用;
2.尾部添加和刪除:
arr.push(items);
arr.pop():尾部刪除一個元素,返回刪除的元素
3.頭部添加和刪除:
arr.unshift(items):頭部添加
arr.shift():頭部刪除一個元素返回

 

3.如何給數組去重?

1.比較刪除法:
var arr = [11,22,22,33,11];
for(var i =0;i<arr.length-1;i++){
 for(var j=i+1;j<arr.length;j++){
     if(arr[i]==arr[j]){
        arr.splice(j,1);
         j--;
     }
 }
}
​
2.比較存儲法
var newArr = [];
for(var i =0;i<arr.length;i++){
 if(newArr.indexOf(arr[i])==-1){
     newArr.push(arr[i]);
 }
}

 

4.請寫出給一個數組使用選擇排序演算法排序的代碼?

for(var i=0;i<arr.length-1;i++){
 var minIndex = i;
 for(var j=i+1;j<arr.length;j++){
     if(arr[minIndex]>arr[j]){
         minIndex = j;
     }
 }
 //minIndex和i交換
 var temp = arr[i];
 arr[i] = arr[minIndex];
 arr[minIndex] = temp;
}

 

5.請寫出給一個數組使用冒泡排序演算法排序的代碼?

for(var i = 0;i<arr.length-1;i++){
 for(var j=0;j<arr.length-i-1;j++){
     if(arr[j]>arr[j+1]){
         var temp = arr[j];
         arr[j] = arr[j+1];
         arr[j+1] = temp;
     }
 }
}

 

6.已知數組var arr = [1,2,-4,6,0,9];如何對該數組元素進行隨機排序?

var arr = [1,2,-4,6,0,9];
arr.sort(function(a,b){
 return Math.random()-0.5;
})

 

7.如何對數組中的對象排序,請用代碼舉例說明?

var arr = [
 {name:'zs',age:18},
 {name:'xx',age:20},
 {name:'zz',age:19},
​
]
arr.sort(function(a,b){
 returen a.age-b.age;//按照年齡從小到大.
})

 

8.統計一個字元串中某個字元出現的次數?並找出出現次數最多的字元?

var str = 'aafwafawf23j2i32inkl32jio23';
var obj = {}
for(var i = 0;i<str.length;i++){
 var count = str.split(str[i]).length-1;
 var char = str[i];
 obj[char] = count;
}
//找到value最大的key
var maxCount = 0;
var manChar;
for(var key in obj){
 if(obj[key]>maxCount){
     maxCount = obj[key];
     maxChar = key;
 }
}
maxChar:次數最多的字元
maxCount;最大重覆次數
 

1.數組的常用方法有哪些(10)?

1.添加和刪除
    arr.push(items):尾部添加
    arr.pop():尾部刪除
arr.unshift(items):頭部添加
arr.shift():頭部刪除
2.splice方法:
    arr.splice(start,deleteCount,items):從start開始刪除deletecount個元素,並用items替換.
        deleteCount:如果不指定,預設刪除到結尾.
​
​
3.數組的其他方法:
    arr.join("連接符"):將數組元素通過連接符拼接成一個字元串.
arr.reverse():反轉數組.
arr.concat(arr2,arr3):將數組拼接成一個新數組[arr,arr2,arr3]
    arr.indexOf('元素'):判斷元素在數組中的下標,如果不存在返回-1
    arr.slice(start,end):從start開始截取到end-1為止(包頭不包尾)
4.排序方法:
    arr.sort(function(a,b){
     return a-b//升序
     return b-a//降序
 })

 

2.正則對象的創建方法?正則修飾符有哪些?

字面量: /正則表達式/修飾符
關鍵字:new RegExp('正則表達式','修飾符')
​
修飾符:
1.g:全局匹配.
2.i:忽略大小寫 

 

3.正則的匹配方法有哪些?

1.字元串的方法:
    str,replace(regObj,用什麼替換)
    str.split(regObj)
    str.search(regObj):查詢regObj匹配的內容的下標,如果沒有找到返回-1
    str.match(regObj):將正則匹配到的內容提取出來.配合g修飾符可以全局查找提取.
2.正則對象方法:
    regObj.test(str):查看正則對象時候匹配字元串,true為匹配,false為不匹配.
 regObj.exec(str):檢索正則匹配到的內容,返回一個數組.

 

4.請列舉出常見的元字元並說出他們的含義?

單個字元:
    .:除換行符意外的任意字元.
 [abc]:匹配a或b或c
 [a-z]:匹配小寫字母
    [^a-z]:匹配非小寫字母.
 \d:數值0-9
    \w:數字字母,下劃線
    \s:空白字元(空格&nbsp;,換行\n,\t)
    \b:單詞邊界
表示重覆次數:
    ?:重覆0或1次
 *:>=0
    +:>=1
    {n};重覆n次
 {n,m}:[n,m]
    {n,}:>=n

 

5.DOM如何獲取子節點,並說出他們的區別?

parent.children :返回htmlcollection,獲取標簽子節點.
parent.childNodes:返回NodeList,可以獲取所有類型的子元素(文本節點,註釋節點,標簽節點)

 

6.DOM如何獲取父節點。

1.獲取直接父元素:子元素.parentNode
2.獲取定位父元素:子元素.offsetParent

 

7.DOM如何獲取兄弟節點?

1.首節點:parent.firstElementChild || parent.firstChild
2.尾節點:parent.lastElementChild || parent.lastChild
3.下一個兄弟: 參考節點.nextElementSibling || nextSilbing
4.上一個兄弟:參考節點.previousElementSibling || previousSilbing
​
​

 

8.如何通過css選擇器獲取元素?

document/parent.querySelector();獲取選擇器選中的第一個元素.
document/parent.querySelectorAll():獲取選擇器選中的所有元素.

 

9.如何創建一個標簽節點。

document.createElement("標簽名")
 

1.DOM的屬性操作有哪些方法,並說明其作用?

1.元素.屬性名操作屬性:
    獲取:元素.屬性名
    設置:元素.屬性名 = 屬性值
    註意:只能操作預設屬性,操作自定義屬性怎麼設置怎麼獲取.
2.元素.getAttribute(屬性名):獲取屬性
    註意:可以獲取任意屬性.
3.元素.setAttribute(屬性名,屬性值)
    可以設置任意屬性.
4.元素.removeAttribute(屬性名)

 

2.DOM如何快速的獲取表格內容,都有哪些方法。

第一步:獲取table標簽
第二步:通過table標簽屬性快速獲取其他表格元素.
oTab.tHead-表頭
oTab.tBodies:獲取所有的tbody
oTab.tFoot:獲取表的底部
oTab.tBodies[0].rows:獲取tbody的所有的行
oTab.tBodies[0].rows[0].cells:獲取tbody的第一行的所有單元格.
​
​

 

3.如何快速的獲取表單的input,form表單的事件分別有哪些,其作用是什麼?

1.
第一步:獲取form標簽
第二步:通過form標簽.表單元素name屬性可以快速獲取所有的表單控制項.
2.form的事件:
(1)onreset:重置事件,事件函數中返回true:允許重置,false:阻止重置.
(2)onsubmit:表單提交事件,事件函數中返回true:允許提交,false:阻止提交.
​

 

4.input表單控制項的事件(5個)有哪些,請分別說明起作用。

onfocus:表單獲取游標觸發.
onblur:表單失去游標
oninput:獲取焦點後,,當表單內容發生變化時觸發(實時觸發)
    IE低版本不報錯,無效.
onpropertychange:獲取焦點後,當表單內容發生變化時觸發(實時觸發)
    IE低版本有效.
onchange:失去焦點的時候輸入框內容發生變化時觸發(當前內容和上一次內容比較)

 

5.什麼是BOM,BOM的核心是什麼,window和document的區別是什麼?

BOM:broswer object model(瀏覽器對象模型)
BOM的核心是window,window是JS中最大的對象,所有全局變數和函數都屬於window,可以通過window.來調用,也可以省略window
window和document的區別:
1.window表示瀏覽器視窗對象,是JS最大的對象.是BOM的核心.
2.document表示文檔對象.是DOM的核心.

 

6.BOM的client系列有哪些屬性,並說明其作用。

元素.clientWidth:獲取可視寬 (content+padding)
元素.clientHeight:獲取可視高(content+padding)
獲取視窗的可視區寬高:
    document.documentElement.clientWidth/clientHeight

 

7.BOM的offset系列有哪些屬性,並說明起作用?

1.獲取元素的占位寬高:
    元素.offsetWidth/offsetHeight(content+padding+border)
2.獲取元素的位置:(獲取距離定位父元素的距離)
    元素.offsetTop/offsetLeft

 

8.BOM的scroll系列有哪些屬性,並說明其作用?

1.獲取元素實際寬高:
    元素.scrollWidth/scrollHeight
2.獲取被卷曲的高度:元素.scrollTop
3.獲取元素被卷曲的寬度:元素.scrollLeft
4.獲取頁面被卷曲的高度:
    document.body.scrollTop || document.documentElement.scrollTop 

 

9.DOM創建節點,刪除節點,添加節點,替換和複製節點的方法分別是什麼?(DOM操作節點的方法)(7)

1.獲取節點:通過id獲取------document.getElementById()
       通過class獲取---document/parent.getElementByClassName()
      通過標簽名獲取---document/parent.getElementByTagName()
      通過CSS選擇器獲取---document/parent.querySelector()
                  documnet/parentquerySelectorAll()
      獲取子節點:---parent.children---獲取標簽子元素
                       ---返回HtmlCollection
              parent.childNodes---獲取所有類型的子元素
                        ---返回NodeList
      獲取父元素  直接父元素---child.parentNode
             定位父元素---child.offsetParent
      獲取兄弟節點  第一個兄弟節點---parent.firstElementChild||parent.firstChild
             最後一個兄弟節點--parent.lastElementChild||parent.lastChild
             下一個兄弟----refChild.nextElementSibling||refChild.nextSibling
             上一個兄弟----refChild.previousElementSibling||refChild.previousSibling

2.操作節點    創建節點---document.createElement("tagName")
          添加節點:  追加末尾----parent.appendChild(子元素)
                前面插入元素---parent.insertBefore(newChild,refChild)
         刪除節點:   刪除自身---元素.removed()
                刪除子元素---父元素.removeChild(子元素)
         替換節點:    parent.repaceChild(newChild,refChild)
         複製節點:  被覆制的節點:cloneNode(boolean)   boolean=true---複製標簽和內容
                                    boolean=false---複製標簽---預設
3.操作節點屬性  標簽.屬性名
         getAttribute
         setAttribute
         removeAttribute
4.操作節點內容  innnerHTML
         innerText
5.操作節點的樣式  設置樣式---標簽.style.樣式名=樣式值
          獲取樣式:function getStyle(elem,attr){
                  if(elem.currenStyle){
                    return elem.currenStyle[arrt]
                    }else{
                        getComputedStyle(elem)[arrt]
                      }
                   }

1.什麼是事件對象,如何獲取事件對象?

事件對象是事件函數中的特殊對象,瀏覽器會將和事件相關的信息放到事件對象中.
獲取事件對象:
1.事件處理函數的第一個參數就是事件對象.
2.window.event(window可以省略)
var e = window.event || e;

 

2.如何綁定事件,相容寫法是什麼?如何封裝一個綁定事件的函數。

1.標準:
元素.addEventListener(事件類型,事件處理函數)
2.IE:
元素.attachEvent(on事件類型,事件處理函數.)
相容:
if(元素.attachEvent){
 元素.attachEvent(on事件類型,事件處理函數.)
}else{
 元素.addEventListener(事件類型,事件處理函數)
}
​
函數封裝:
function bindEventListener(elem,etype,fn){
 if(elem.attachEvent){
    elem.attachEvent('on'+etype,fn.)
 }else{
     elem.addEventListener(etype,fn)
 }
}

 

3.如何解綁事件,相容寫法是什麼?如何封裝一個取消綁定事件的函數。

1.標準:
元素.removeEventListener(事件類型,事件處理函數)
2.IE:
元素.detachEvent(on事件類型,事件處理函數.)
相容:
if(元素.detachEvent){
 元素.detachEvent(on事件類型,事件處理函數.)
}else{
 元素.removeEventListener(事件類型,事件處理函數)
}
​
函數封裝:
function unbindEventListener(elem,etype,fn){
 if(elem.detachEvent){
    elem.detachEvent('on'+etype,fn.)
 }else{
     elem.removeEventListener(etype,fn)
 }
}

 

4.什麼是事件流,事件流分為哪些階段,並說明這些階段的過程。

事件流:瀏覽器解析執行事件的過程.事件流可以分為捕獲和冒泡階段.
事件的執行:
(1)確定事件目標
(2)事件傳遞
捕獲階段:當事件發生時,從window依次先事件目標(e.target)傳遞,如果某個元素由相同類型的事件,就觸發,直到傳遞到事件目標為止.
冒泡階段:當事件發生時,從事件目標開始依次先父元素傳遞的過程,如果某個元素由相同類型的事件,就觸發,直到傳遞到window為止.

 

5.如何阻止事件冒泡?

1.獲取事件對象
var e = window.event||e;
2.阻止冒泡:
(1)標準:e.stopPropagation()
(2)IE:e.cancelBubble = true;

6.如何阻止預設行為?

預設行為:
    a標簽預設跳轉
 img拖拽預設保存
 button在form預設提交
 右鍵預設菜單.
​
1.元素.on事件類型綁定事件,通過事件函數中return false;
a.onclick = function(){
​
 return false;//阻止預設行為
}
2.通過事件對象阻止預設行為:
    標準:e.preventDefault();
    IE:e.returnValue = false;

 

本文來自博客園,作者:葉子dada,轉載請註明原文鏈接:https://www.cnblogs.com/yeziblogs/p/16203698.html

對溫床的眷戀,對過去的沉溺,容易讓人產生一種好像什麼都晚了的錯覺。有沒有勇氣去追尋自己想要的生活,與你是幾歲都沒有關係。任何時間都是及時的,年輕的,能有所為的
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Set介面 介紹 無序(添加和取出的順序不一致),沒有索引 不允許重覆,所以最多包含一個null JDK API中Set介面實現類有 Set介面常用方法 和List介面一樣,Set介面也是Collection的子介面,因此,常用方法和Collection介面一樣 特點 不能存放重覆的元素 set介面 ...
  • 主從複製 SLAVEOF 新舊複製功能 舊版複製功能 舊版複製功能的實現為 同步 和 命令傳播: 當剛連上Master時,要做一次全同步: sequenceDiagram participant Slave participant Master Slave->>Master: SYNC Master ...
  • 文章首發於公眾號:BiggerBoy 有讀者說面試被問到怎麼用SQL模擬資料庫死鎖? 這位讀者表示對Java中的死鎖還是略知一二的,但是突然用SQL寫死鎖的案例之前還真沒遇到過,這個問題沒答上來。所以今天就帶大家一起來看下怎麼用SQL讓資料庫中產生死鎖。 什麼是死鎖 說到死鎖,還是先來複習下什麼是死 ...
  • 本次要講的內容是利用RecyclerView顯示Users列表的信息,如下圖所示。 首先我們來創建模型User.java package com.example.mytest.User; import java.util.UUID; public class User{ private UUID m ...
  • 為增強ArkUI開發框架的圖像處理能力,ImageKnife組件應運而生。本期我們將為大家帶來ImageKnife的介紹。 ...
  • 今天差不多從中午開始下午一點才開始學的,把git學了一大半了,還好任務不是很多,但是我上午用的時間挺值的,因為我去搞了個cnblogs的背景主題,就是你們現在所看到的這套,這個沒搞明白有一通研究的,只不過現在已經搞熟悉了,添加那些參數,不得不說挺強大的,這個自己編輯頁面的功能,我最滿意的這套主題,是 ...
  • 大家好,我是半夏👴,一個剛剛開始寫文的沙雕程式員.如果喜歡我的文章,可以關註➕ 點贊 👍 加我微信:frontendpicker,一起學習交流前端,成為更優秀的工程師~關註公眾號:搞前端的半夏,瞭解更多前端知識! 點我探索新世界! 原文鏈接 ==>http://sylblog.xin/archi ...
  • 前言 記錄一下學習html,初識前端,記錄一些html的常用標簽,雖然簡單,但會經常用到。 <h1> 標題標簽</h1> 標題標簽 <p>段落標簽</p> 段落標簽 換行標簽</br> 換行標簽 水平線標簽</hr> 特殊符號 &nbsp; &lt; &gt; &amp; &yen; &copy; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...