第12章、DOM2和DOM3

12.1 DOM變化

node類型變化,DOM3引入兩個(gè)輔助比較節(jié)點(diǎn)的方法,isSameNode()和isEqualNode(),分別判斷調(diào)用節(jié)點(diǎn)和參數(shù)節(jié)點(diǎn)是否相同或相等。相同表示兩個(gè)節(jié)點(diǎn)引用的是同一個(gè)節(jié)點(diǎn),相等表示兩個(gè)節(jié)點(diǎn)是相同的類型,具有相同的屬性(nodeName,nodeValue),而且他們的attributes和childNodes屬性也相等。

<ul class="a">
    <li class="b">abc</li>
    <li class="b">abc</li>
</ul>

var li = document.querySelectorAll(".b");
console.log(li[0].isSameNode(li[1]));  // false
console.log(li[0].isEqualNode(li[1]));  // true

框架的變化,框架和內(nèi)嵌框架DOM2級(jí)新增屬性contentDocument,這個(gè)屬性包含一個(gè)指針,指向表示框架內(nèi)容的文檔對(duì)象。IE8之前不支持本屬性,但支持一個(gè)contentWindow屬性,該屬性返回框架的window對(duì)象,window對(duì)象又包含document屬性。兼容性獲取框架的文檔對(duì)象:

var iframe = document.getElementBy("iframe");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

12.2 樣式

12.2.1 訪問(wèn)元素的樣式

任何支持style特性的HTML元素都有一個(gè)對(duì)應(yīng)的style屬性,包含通過(guò)HTML的style特性指定的所有樣式信息,但不包含外部樣式表或嵌入樣式表經(jīng)層疊而來(lái)的樣式。有短劃線的CSS屬性名(例如background-color)必須轉(zhuǎn)為駝峰大小寫形式。float是JavaScript中的關(guān)鍵字,要轉(zhuǎn)為cssFloat,IE使用的是styleFloat。style對(duì)象具有以下屬性方法:
cssText屬性,能夠訪問(wèn)到style特性中的CSS代碼。
getPropertyValue(),傳入一個(gè)參數(shù),返回包含給定屬性名的字符串值。
getPropertyPriority(),傳入一個(gè)參數(shù),返回包含給定屬性是否使用了!important設(shè)置。設(shè)置了則返回"important"字符串,否則返回空字符串。
removeProperty(),傳入一個(gè)參數(shù),從樣式中刪除給定的屬性。
setProperty(),傳入3個(gè)參數(shù),要設(shè)置的屬性名,要設(shè)置的屬性值,表示是否使用!important設(shè)置的“important”字符串或空字符串。
document.defaultView.getComputedStyle()方法用于確定元素所有的計(jì)算樣式,接收兩個(gè)參數(shù),第一個(gè)為需要取得計(jì)算樣式的元素,第二個(gè)為偽元素字符串,不需要偽元素則為null。IE不支持本方法,但提供元素的currentStyle屬性,包含當(dāng)前元素的所有計(jì)算樣式。所有計(jì)算樣式都是只讀的,不能修改計(jì)算后的樣式對(duì)象中的CSS。

12.2.2 元素大小

元素的可見(jiàn)大小由其高度,寬度決定,包括內(nèi)邊距,滾動(dòng)條和邊框大小,不包括外邊距。
offsetParent屬性,表示元素的包含元素,不一定與parentNode相等。
offsetHeight屬性,元素在垂直方向上占用空間大小,包括元素高度,水平滾動(dòng)條的高度,上邊框高度和下邊看高度。
offsetWidth屬性,元素在水平方向上占用空間大小,包括元素寬度,垂直滾動(dòng)條的寬度,左邊框?qū)挾群陀疫吙磳挾取?br> offsetLeft屬性,元素左外邊框到包含元素的左內(nèi)邊框之間的距離。
offsetTop屬性,元素上外邊框到包含元素的上內(nèi)邊框之間的距離。
判斷元素在頁(yè)面上的偏移量:

function getElementLeftTop(ele) {
    var eleLeft = ele.offsetLeft;
    var eleTop = ele.offsetTop;
    var cur = ele.offsetParent;
    while (cur !== null){
        eleLeft += cur.offsetLeft;
        eleTop += cur.offsetTop;
        cur = cur.offsetParent;
    }
    return {left:eleLeft, top:eleTop};
}

客戶區(qū)域大小,指的是元素內(nèi)容及其內(nèi)邊距所占據(jù)的空間大小。
clientWidth屬性,元素內(nèi)容區(qū)寬度加上左右內(nèi)邊距寬度。
clientHeight屬性,元素內(nèi)容區(qū)高度加上上下內(nèi)邊距寬度。
確定瀏覽器的視口大?。?/p>

function getElementWidthHeight() {
    if(document.compatMode == "BackCompat"){
        return {
            width:document.body.clientWidth,
            top:document.body.clientHeight
        };
    }else{
        return {
            width:document.documentElement.clientWidth,
            top:document.documentElement.clientHeight
        };
    }
}

滾動(dòng)大小,指的是包含滾動(dòng)內(nèi)容的元素的大小。
scrollHeight屬性,在沒(méi)有滾動(dòng)條的情況下,元素內(nèi)容總高度。
scrollWidth屬性,在沒(méi)有滾動(dòng)條的情況下,元素內(nèi)容總寬度。
scrollLeft屬性,被隱藏在內(nèi)容區(qū)域左側(cè)的像素?cái)?shù),通過(guò)設(shè)置這個(gè)屬性可以改變?cè)氐臐L動(dòng)位置。
scrollTop屬性,被隱藏在內(nèi)容區(qū)域上方的像素?cái)?shù),通過(guò)設(shè)置這個(gè)屬性可以改變?cè)氐臐L動(dòng)位置。
確定文檔總高度:

function getDocWidthHeight() {
    var docWidth,docHeight;
    if(document.compatMode == "BackCompat"){
        docWidth = Math.max(document.body.scrollWidth,document.body.clientWidth);
        docHeight = Math.max(document.body.scrollHeight,document.body.clientHeight);
    }else{
        docWidth = Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
        docHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
    }
    return {
        width:docWidth,
        height:docHeight
    };
}

確定元素大小,每個(gè)元素都有一個(gè)getBoundingClientRect()方法,該方法返回一個(gè)矩形對(duì)象,包含left、top、right、bottom屬性。這些元素給出了元素相對(duì)于視口的位置。

最后編輯于
?著作權(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)容