1 IIFE
IIFE就是immediately-invoked function expression,即時調用函數表達式
如果一個函數,在定義的時候,我們就想直接調用它,就是一個IIFE。
我們試圖在定義函數的後面,直接寫圓括號:
/* 直接在後面寫()會報錯 */
function fun(){
alert("哈哈")
}();
控制檯報錯,這是因爲函數是一個函數體,並不是表達式,只有表達式能夠用()來執行。
所以就要把function fun(){}“降級”, 從函數體降級爲表達式。方法有很多:
+function fun(){
alert("哈哈")
}();
-function fun(){
alert("哈哈")
}();
但這樣寫有點特立獨行,標準的IIFE寫法如下,括號把函數定義給括起來然後再調用。
(function(){
alert("哈哈");
})();
IIFE裏面的函數,都是匿名函數。
2 DOM
2.1 獲取元素
/* 下面兩個全線兼容 */
document.getElementById(); // 通過id得到元素
document.getElementsByTagName(); // 通過標籤名得到元素們
/* 這兩個不是全線兼容的 */
document.getElementsByClassName(); 通過類名得到元素
document.querySelector(); 通過選擇器得到元素
2.2 innerHTML
ele.innerHTML屬性就是HTML標籤內部的文本。可以讀,可以設。
2.3 獲取樣式
2.3.1 行內樣式
行內樣式(就是直接在標籤上設置style=""這種)的獲取直接用.style
,用.style
設置屬性的時候用駝峯命名法。如下面的backgroundColor,fontSize。
對應的css是background-color,font-size。
var oP = document.getElementById("pp");
oP.style.backgroundColor = "skyblue";
oP.style.fontSize = "100px";
2.3.2 計算後樣式
.style
只能獲取行內樣式,那如何獲取內聯樣式(style標籤對中的樣式)或外聯樣式(link引入的樣式)呢?使用js中的計算後樣式。
高級瀏覽器:
window.getComputedStyle(oDiv).getPropertyValue("padding-left");
getComputedStyle(oDiv).getPropertyValue("padding-left");
getComputedStyle(oDiv)["padding-left"]; //注意 寫的是padding-left
IE6、7、8:
oDiv.currentStyle.paddingLeft;
oDiv.currentStyle["paddingLeft"]; //注意 寫的是paddingLeft
/* */
注意: 當盒子沒有設置高度時,高度完全是靠文字撐的,用currentStyle.height獲得的值是auto字符串,不是對應的像素值。(ps: 這中情況可使用2.4.2的offsetHeight獲得)
2.4 位置和尺寸
2.4.1 offsetLeft和offsetTop
都是數值。
一個元素的offsetLeft值,就是這個元素左邊框外,到自己的offsetParent對象的左邊框內的距離。
那麼誰是自己的offsetParent呢?不同瀏覽器有差異,如圖。
IE6、7 | IE8 | IE9、IE9+、高級瀏覽器 | |
---|---|---|---|
offsetParent | 如果自己沒有定位,那麼就是自己父親中有width或者有height或者有定位的元素。如果自己有定位,那麼就是和高級瀏覽器一致。 | 和高級瀏覽器一致 | 自己祖先元素中,離自己最近的已經定位的元素 |
offsetLeft | 和高級瀏覽器一致 | 多算一條border | 自己的border外到offsetParet對象的border內 |
最好的使用方式:
自定位,父無邊 (父親也要定位,但是爲了順口,就不多說了)
這樣使用,所有瀏覽器的值都是一樣的。
2.4.2 offsetWidth和offsetHeight
全線兼容。都是數值。
一個盒子的offsetWidth值就是自己的 width+左右padding+左右border的寬度。
特別注意,IE6、7、8下,盒子沒有高度,文字撐的,用currentStyle.height是auto,體現出了offsetHeight的好用。
2.4.3 clientWidth和clientHeight
都是數值。
clientWidth就是自己的width+padding的值。 也就是說,比offsetWidth少了border。