原生的DOM操作、jq的DOM操作及元素操作

JS中所有全局都是window的

window的作用:在封閉空間中聲明一個(gè)全局的變量 
全局變量和函數(shù)都屬于window

javascript

 是由什么東西組成?
 ECMAScript 核心解釋器(ES5和ES6)
 DOM BOM
提供最基本的功能比如:12+5  var a = 12; function show(){}
兼容性:完全兼容。

DOM 文檔對(duì)象模型 Document Object Model

就是document 操作頁(yè)面的。
獲取元素,修改樣式,創(chuàng)建元素
兼容性:很好,有不兼容的,但是可以解決。

BOM 瀏覽器對(duì)象模型 Browser Object Model

就是window 操作瀏覽器
    window.onload
    window.alert();
  兼容性:基本不兼容,解決不了。

BOM

BOM 跟瀏覽器有關(guān)。
window
打開(kāi)一個(gè)新頁(yè)面。
window.open(地址)
window.open(地址,打開(kāi)方式);
打開(kāi)方式:
    _blank   加載到一個(gè)新的窗口
    _self    替換當(dāng)前頁(yè)面
    .....
window.location:
    alert(window.location);
    alert(window.location.href);
    window.location = 'http://www.baidu.com';
    alert(window.location.hash);  //#錨點(diǎn)信息
    alert(window.location.host);  //域名 localhost:63342
    alert(window.location.hostname); //主機(jī)名 localhost
    alert(window.location.port); //端口
    alert(window.location.protocol); //協(xié)議 http https
    alert(window.location.search); //數(shù)據(jù)信息
    alert(window.location.pathname); //路徑名
window.history:
          歷史
    window.history.forward(); //前進(jìn)
    window.history.back();   //后退
    window.history.go(數(shù)字); //去哪個(gè) 前進(jìn):1 后退:-1 前進(jìn)2個(gè):2
confirm:
alert('提示信息')  彈出提示框
confirm('提示信息')   ——>  也有返回值:true / false
    如果選了確定  --  true
    如果選了取消 --  false
var bDel = confirm('真的要?jiǎng)h除嗎?');
    if(bDel){
        //說(shuō)明點(diǎn)了確定,直接刪除
    }else{
        //不要?jiǎng)h
    }

DOM操作(一)

DOM樹(shù):文檔的結(jié)構(gòu)              
document
    標(biāo)簽=元素=節(jié)點(diǎn)
obj.tagName  獲取節(jié)點(diǎn)的名字
(所有的字母都是大寫(xiě)的)

DOM結(jié)構(gòu)
   獲取父節(jié)點(diǎn)(獲取他爹)
       obj.parentNode      最大的祖宗是document,在往上就是null 

   獲取子節(jié)點(diǎn)
       childNodes 獲取子節(jié)點(diǎn),包括文本節(jié)點(diǎn)
       節(jié)點(diǎn)類(lèi)型:
            文本節(jié)點(diǎn)
            標(biāo)簽節(jié)點(diǎn)
       檢測(cè)節(jié)點(diǎn)的類(lèi)型:nodeType
                obj.nodeType
                     3  文本節(jié)點(diǎn)
                     1  標(biāo)簽節(jié)點(diǎn)    
    
children 獲取子節(jié)點(diǎn)(只包括第一層) 獲取的子節(jié)點(diǎn)不包括文本節(jié)點(diǎn)
         只包括它的第一層子節(jié)點(diǎn),不包括它的孫子級(jí)
         獲取到的是一組元素 可以用下標(biāo)、leng

true&&alert(1);
     &&如果兩個(gè)都是真的,才是真的。如果第一個(gè)是假的,后面的不執(zhí)行。
var a = false||5;
     ||   從左往右開(kāi)始看,有真的取真的,如果都為假,取最后一個(gè)

獲取上一個(gè)兄弟節(jié)點(diǎn)
obj.previousElementSibling  兼容:高版本瀏覽器
obj.previousSibling 兼容:ie6,7,8 
兼容寫(xiě)法    obj.previousElementSibling||obj.previousSibling;    

獲取下一個(gè)兄弟節(jié)點(diǎn)
obj.nextElementSibling  兼容:高版本瀏覽器
obj.nextSibling 兼容:ie6,7,8    其他瀏覽器是文本
兼容寫(xiě)法   obj.nextElementSibling||obj.nextSibling; 

獲取首尾子節(jié)點(diǎn)
首子節(jié)點(diǎn)
父級(jí).firstElementChild 兼容高版本瀏覽器
父級(jí).firstChild  兼容ie6,7,8
兼容寫(xiě)法   父級(jí).firstElementChild||父級(jí).firstChild  

尾子節(jié)點(diǎn)
父級(jí).lastElementChild 兼容高版本瀏覽器
父級(jí).lastChild  兼容ie6,7,8
兼容寫(xiě)法    父級(jí).lastElementChild||父級(jí).lastChild   
首子節(jié)點(diǎn)   obj.children[0]; 
尾子節(jié)點(diǎn)  obj.children[obj.children.length-1];

創(chuàng)建元素
   document.createElement('標(biāo)簽名')  什么標(biāo)簽都能創(chuàng)建  
你創(chuàng)建出來(lái)的標(biāo)簽,跟html中手寫(xiě)的標(biāo)簽一模一樣,沒(méi)有任何區(qū)別。

添加元素
    父級(jí).appendChild(新創(chuàng)建的對(duì)象);
在父級(jí)的最后面添加了一個(gè)元素
    父級(jí).insertBefore(要插入的元素,插入到誰(shuí)之前);
把一個(gè)元素插入到另一個(gè)元素之前
 **必須有一條才能用  必須有插入誰(shuí)之前的元素

刪除元素
 父級(jí).removeChild(要?jiǎng)h除的對(duì)象)

克隆元素
obj.cloneNode()
obj.cloneNode(true) 深度克隆元素,包括內(nèi)容一起克隆
*注意:id也會(huì)被一起克隆。
*小貼士:以后每次使用克隆的時(shí)候都要把id去掉

上移下移:
appendChild和insertBefore有剪切功能   
    
盒子模型:width/height+padding*2+border*2
物體信息:   
obj.offsetWidth   盒子模型的寬度
obj.offsetHeight  盒子模型的高度
obj.offsetTop     距離定位父級(jí)的距離
offsetHeight                            Height
盒子模型高度                          純高度
 number                                 string 

獲取html標(biāo)簽
右下角富媒體:
    1.position:absolute; right:0; bottom:0;
    2.position:fixed; right:0; bottom:0; 不兼容ie6
自己寫(xiě):
onscroll  當(dāng)頁(yè)面滾動(dòng)時(shí)觸發(fā)。
    滾動(dòng)距離(頁(yè)面滾了多少它就是多少)
         document.documentElement.scrollTop;
    不兼容chrome
         document.body.scrollTop;
    兼容chrome
兼容寫(xiě)法:
document.documentElement.scrollTop||document.body.scrollTop;

改變窗口大小事件  onresize      
頁(yè)面滾動(dòng)事件    onscroll

滾動(dòng)距離
    document.documentElement.scrollTop||document.body.scrollTop; 獲取上下滾動(dòng)距離
    document.documentElement.scrollLeft||document.body.scrollLeft; 獲取左右滾動(dòng)距離
獲取可視區(qū)的寬高
    document.documentElement.clientHeight
獲取可視區(qū)高度
    document.documentElement.clientWidth
onfocus:
事件,獲取焦點(diǎn)的事件
onblur:
事件,失去焦點(diǎn)的事件

DOM操作(二)

結(jié)構(gòu):parentNode    document      結(jié)構(gòu)父級(jí)
定位:offsetParent  body          定位父級(jí)
**offsetLeft 物體到有定位父級(jí)的一個(gè)左邊距離
obj.getBoundingClientRect(); 獲取絕對(duì)位置;
    .left 左邊距離頁(yè)面左邊的距離
    .top  上邊距離頁(yè)面上邊的距離
    .right  右邊距離頁(yè)面左邊的距離
    .bottom  下邊距離頁(yè)面上邊的距離

操作屬性
正常和自定義的都行
獲取自定義屬性
     obj.getAttribute('屬性名'); 
設(shè)置自定義屬性
     obj.setAttribute('屬性名','屬性值');
刪除自定義屬性
     obj.removeAttribute(名)
     成對(duì)出現(xiàn)   不能和自定義屬性混用

物體高度:
obj.offsetHeight    物體盒子模型高度
obj.scrollHeight    內(nèi)容高度
如果內(nèi)容小于offsetHeight,取得offsetHeight
如果內(nèi)容大于offsetHeight,內(nèi)容高度

innerHTML的問(wèn)題:
        innerHTML加等于的話:會(huì)清空之前身上事件
圖片對(duì)象:
   new Fuction()
   new Oject()
   new Image()  創(chuàng)建一個(gè)圖片對(duì)象
   這個(gè)東西跟在html中手寫(xiě)的img標(biāo)簽一模一樣。
   img.onload   當(dāng)圖片加載成功觸發(fā)這個(gè)事件。
   img.onerror  當(dāng)圖片加載失敗觸發(fā)這個(gè)事件。

文字提示:
   事件
       獲取焦點(diǎn)事件
           onfocus
       失去焦點(diǎn)事件
           onblur
獲取焦點(diǎn)函數(shù)
讓一個(gè)文本框上來(lái)就獲取焦點(diǎn)
    .focus() 讓一個(gè)元素獲取焦點(diǎn)
    .blur()  讓一個(gè)元素失去焦點(diǎn)
    
事件對(duì)象(event) 包含了事件的詳細(xì)信息。
    ev參數(shù)        事件對(duì)象    兼容chrome FF IE8 9 10 但是得傳參
    event       事件對(duì)象    兼容Chrome和IE系列
    var oEvent = ev||event;(他們倆個(gè)不能換位置)  
    平時(shí)注意寫(xiě)上window.onload 
    只能獲取到鼠標(biāo)和鍵盤(pán)的操作。

獲取鼠標(biāo)在可視區(qū)中的坐標(biāo):
    事件對(duì)象.clientX;       獲取可視區(qū)中X軸坐標(biāo)
    事件對(duì)象.clientY;       獲取可視區(qū)中Y軸坐標(biāo)
**以后只要是操作clientX和clientY就加上滾動(dòng)距離。
ondblclick          雙擊事件。
onmousemove         鼠標(biāo)移動(dòng)事件
        注意:移動(dòng)事件觸發(fā)的特別頻繁。所以里面別放復(fù)雜代碼。

事件冒泡:
   子級(jí)會(huì)去找父級(jí)相同的事件執(zhí)行 
   就算當(dāng)前元素沒(méi)什么沒(méi)有這個(gè)事件 也會(huì)往上冒 
   冒泡跟結(jié)構(gòu)有關(guān)  (沒(méi)事不要取消)
取消事件冒泡:
   var oEvent=ev||event; 
   oEvent.cancelBubble=true     取消事件冒泡.  IE chrome照顧IE
   oEvent.stopPropagation();   取消事件冒泡.  W3C規(guī)定

Jq的元素操作及DOM操作

Jq的元素操作

$  -  jQuery庫(kù)  jQuery()
jQuery中所有的東西,都在 $ 身上。

domReady:
$(function(){
    
});
另一種寫(xiě)法:
$(document).ready(function(){
    
});

獲取元素:
根據(jù)id:      $('#id')
根據(jù)class:  $('.class')
根據(jù)標(biāo)簽名: $('標(biāo)簽名')

加事件:
$('#id').click(fucntion(){});       
用 $ 獲取到的元素,都是 jquery的對(duì)象,不是原生的對(duì)象。

設(shè)置樣式:
$('div').css('background','red')
獲取樣式:
$('div').css('display');

設(shè)置顯示、隱藏:
顯示: .show();
隱藏: .hide();

toggle:綁定兩個(gè)或多個(gè)事件處理器函數(shù),以響應(yīng)被選元素的輪流的 click 事件
    
鼠標(biāo)移入:
mouseenter  mouseover
鼠標(biāo)移出:
mouseleave  mouseout
移入移出切換 :
$('#btn').hover(function(){}, function(){});
兩個(gè)函數(shù),分別表示移入和移出(第一個(gè)函數(shù)->移入,第二個(gè)函數(shù)->移出)
    
淡入淡出:
$('#div1').fadeIn();
$('#div1').fadeOut();

*jquery里,涉及動(dòng)畫(huà)的東西,先停止,再繼續(xù)
$('#div1').stop().fadeIn();

*調(diào)用jquery的方法時(shí),可以采用 鏈?zhǔn)? 寫(xiě)法。
$('#div1').stop().fadeIn();
替換了:
    $('#div1').stop();
            $('#div1').fadeIn();
下拉:slideDown
收起:slideUp

自定義動(dòng)畫(huà)效果,animate  先加上stop()
animate(params,[speed],[easing],[fn])
params:一組包含作為動(dòng)畫(huà)屬性和終值的樣式屬性和及其值的集合
speed:三種預(yù)定速度之一的字符串("slow","normal", or "fast")或
        表示動(dòng)畫(huà)時(shí)長(zhǎng)的毫秒數(shù)值(如:1000)
easing:要使用的擦除效果的名稱(需要插件支持).默認(rèn)jQuery提供"linear" 和 "swing"
fn:在動(dòng)畫(huà)完成時(shí)執(zhí)行的函數(shù),每個(gè)元素執(zhí)行一次。
Params的屬性值必須是數(shù)字 不是數(shù)字沒(méi)辦法運(yùn)動(dòng)
改變顏色:https://bitstorm.org/jquery/color-animation/jquery.animate-colors.js

選擇器:獲取元素    
常用三種:
id:     $('#id')
標(biāo)簽:  $('標(biāo)簽名')
class: $('.class名字')

屬性:
$('li[屬性名="屬性值"]')

偽類(lèi):
:first    第一個(gè)
:last     最后一個(gè)
:even     偶數(shù)行
:odd      奇數(shù)行
:eq(索引值)  按索引取第幾個(gè) -- 從0開(kāi)始
:lt 小于索引值
:gt 大于索引值
:contains(text)  找內(nèi)容中包含
li:has(標(biāo)簽名)  標(biāo)簽名是li下的 選中的是li
$('#box input')  嵌套選擇
       **** .eq(索引值)    獲取指定索引值的元素 

css的操作:
獲取:   .css('樣式名');  
設(shè)置:   .css('樣式名','值');
批量設(shè)置:.css({多個(gè)樣式名和值});

屬性操作:
獲取屬性:     .attr('屬性名');
設(shè)置屬性:     .attr('屬性名','值');
批量設(shè)置屬性: .attr({多個(gè)屬性名和值});

class的操作:
    增:  addClass('class名');
    刪:  removeClass('class名');

內(nèi)容的操作:
表單元素的內(nèi)容:
    原生: .value
    jq:  
        獲?。?val()
        設(shè)置:.val('設(shè)置的值');
標(biāo)簽的內(nèi)容:
    原生: innerHTML
    jq:
        獲?。?.html()
        設(shè)置: .html('設(shè)置的內(nèi)容');
對(duì)象:
   原生對(duì)象,不能用jq的方法的操作
   jq對(duì)象,不能用原生的方法操作

把jq對(duì)象轉(zhuǎn)成原生對(duì)象:  $('div')[0]
把原生對(duì)象轉(zhuǎn)成jq對(duì)象:  $(oDiv)
     jquey里,this,通常情況下(在多數(shù)情況下),指的是原生對(duì)象(不是jq對(duì)象)。
     ***鏈?zhǔn)讲僮?
獲取索引值: .index()

Jq的DOM操作:

位置:
    原生:
        到定位父級(jí):
            oDiv.offsetLeft
            oDiv.offsetTop
        絕對(duì)位置:
            getPos(oDiv).left
            getPos(oDiv).top
    jquery:
        到定位父級(jí):
            $(this).position().left 
            $(this).position().top
        絕對(duì)位置:
            $(this).offset().left
            $(this).offset().top
大?。?    原生:
        盒模型:
            offsetWidth
            offsetHeight
    jquery:
        普通寬:$(this).width()  //普通,不包含border和 padding
        普通高:$(this).height()

        $(this).innerWidth() //包含 普通+ padding
        $(this).innerHeight() 

        $(this).outerWidth() //包含普通+ padding+ border
        $(this).outerHeight()  
可視區(qū)大?。?寬:$(window).width()
高:$(window).height()
滾動(dòng)條:
    原生 :  
        document.documentElement.scrollTop || document.body.scrollTop;
    jquery:
        $(document).scrollTop()
        $(document).scrollLeft();

兄弟們:
$(this).siblings() ;
DOM操作:
創(chuàng)建元素: $('<p>fffff</p>')

append:
    A.append(B);     // 在A里面追加B (后面)
appendTo:
    A.appendTo(B);   //把A放到B里面(后面)
prepend:
    A.prepend(B);  // 在A里面追加B (前面)
prependTo:
    A.prependTo(B);  //把A放到B里面(前面)
after:
    A.after(B);        //把B放到A后面 (外面)
before:
    A.before(B);       //把B放到A前面 (外面)
insertAfter:
    A.insertAfter(B);   //把A放到B后面 (外面)
insertBefore:
    A.insertBefore(B);  //把A放到B前面(外面)

刪除元素:
remove:
    $('選中的元素').remove('id/css/tag/嵌套/...');

jq事件:

在jquery里,所有的事件,都是綁定的。
綁定,解綁,委托:
    -------------------------------------
    1.7 開(kāi)始,下面的方式,都棄用
        bind()      unbind()   直接綁定
        live()      die()      通過(guò)冒泡
        delegate    undelegate 更精確的小范圍使用事件委托
    --------------------------------------

綁定:  on
   簡(jiǎn)單綁定: $(obj).on('事件名',function(){});
   傳遞數(shù)據(jù): $(obj).on('事件名','選擇器',{數(shù)據(jù)},function(ev){
                     ev.data // 就是傳過(guò)來(lái)的數(shù)據(jù)
            });
   多個(gè)事件:  $(obj).on('事件名1 事件名2...',function(){});
                       ***多個(gè)事件用空格分開(kāi)

解綁定: off
   $(obj).off();  //全部事件都消失了
   $(obj).off('事件名');  //指定的事件消失

委托: on
   $(obj).on('事件名','選擇器',function(ev){
            **函數(shù)里面的this是選擇器(可以是jq任何選擇器)
           //var aaa=ev.target||ev.srcElement
           //**$(aaa)轉(zhuǎn)成jq對(duì)象 才能操作
   });


one:
    $(obj).one('事件名',function(){});  一次性事件
  模擬:
    $(obj).on('事件名',function(){
            alert(123)
            $(obj).off();
        
    })

右鍵:
contextmenu

return false:
   阻止默認(rèn)行為 并且 阻止冒泡

單獨(dú)阻止默認(rèn)行為:ev.preventDefault()
單獨(dú)阻止冒泡:ev.stopPropagation()

*jquery里的事件詳情 ev ,做了兼容處理,不用 ev||event

循環(huán):兩種寫(xiě)法
   $('li').each(function(index,element){
       //index --  i
       //element  --  aLi[i]
       element  原生對(duì)象
       $(element) jq 對(duì)象
  })
   $.each(要循環(huán)的東西,function(i,v){
       //要循環(huán)的東西 可以是原生對(duì)象
   });

小工具:
   $.browser.msie  是否是ie  false/true
   $.trim(str)      去除首尾空格
   $.type       測(cè)試類(lèi)型

jquery:
    js 庫(kù)

為什么流行:
    1)本身確實(shí)有很多封裝好的功能
    2)可擴(kuò)展性非常強(qiáng)
        ---導(dǎo)致很多jquery插件出現(xiàn)了

自定義插件:
    $.fn.toRed = function(){
        //實(shí)現(xiàn)插件的代碼
        在插件里,this  就 jquery對(duì)象。
    }

批量寫(xiě)插件:
    $.fn.extend({
        toRed:function(){
            this.css('','')
        },
        toBlue:function(){
            this.css('','')
        }
    });
//可以單獨(dú)放在js文件里面
***注意自定義插件放在window.onload($()) 外面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容