Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
ocument 對象
每個載入瀏覽器的 HTML 文檔或元素都會成為 Document 對象。
Document 對象使我們可以從腳本中對 HTML 頁面中的所有元素進行訪問。
Javascript 訪問節點方法:
var oLi=document.getElementsByTagName("li");
var oLi=document.getElementById("myHeader");
var oLi=document.getElementsByName("myInput"); //通過name屬性訪問
我們經常要檢測一個HTML中DOM對象是否為空(或是否存在)。
var $jObject=$('#btn');
alert($jObject );
我們會發現, $jObject 永遠不會為空。因為 $() 方法查找對象, 始終都會返回一個jQuery 對象的。
解決辦法:
首先我們就要把jQuery對象轉換成javaScritp對象。
var dom=$jObject[0]; alert(dom);
或者直接判斷jQuery對象的長度為否為0
包:是指有權訪問另外一個函數作用域中的變量的函數.JavaScript創建閉包的常見方式就是在一個函數內部創建另外一個函數.
JavaScript的閉包類似于Java類中使用get/set方法操作類的私有變量,JavaScript閉包是函數的嵌套,內部的函數可以操作上一層的變量屬性,同時此函數可以被外部所調用.
在javascript中沒有塊級作用域,一般為了給某個函數申明一些只有該函數才能使用的局部變量時,我們就會用到閉包,這樣我們可以很大程度上減少全局作用域中的變量,凈化全局作用域。閉包是一種設計原則,它通過分析上下文,來簡化用戶的調用,讓用戶在不知曉的情況下,達到他的目的。使用閉包有好處,也有壞處,濫用閉包會造成內存的大量消耗。
代碼示例
代碼1:
function foo(x) {
var tmp=3;
return function (y) {
alert(x + y + (++tmp));
}
}
var bar=foo(2); // bar 現在是一個閉包
bar(10);
代碼2:
var add=(function () {
var counter=0;
return function () {return counter +=1;}
})();
add();
add();
add();
// 計數器為 3
代碼3:
var App=function() {
var isRTL=false;
var isIE8=false;
var isIE9=false;
var isIE10=false;
return {
init: function() {},
initAjax: function() {}
}
}();
jQuery(document).ready(function() {
App.init(); // init
});
apply()方法和call()方法
每個函數都包含兩個非繼承而來的方法:apply()和call()。
它們的用途相同,都是在特定的作用域中調用函數。
接收參數方面不同,apply()接收兩個參數,一個是函數運行的作用域(this),另一個是參數數組。call()方法第一個參數與apply()方法相同,但傳遞給函數的參數必須列舉出來。
代碼示例
代碼1:
function sum(num1, num2) {
return num1 + num2;
}
console.log(sum.call(window, 10, 10)); //20
console.log(sum.apply(window,[10,20])); //30
代碼2:
window.firstName="diz";
window.lastName="song";
var myObject={ firstName: "my", lastName: "Object" };
function HelloName() {
console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!");
}
HelloName.call(window); //或 .call(this);
HelloName.call(myObject);
運行結果為:
Hello diz song glad to meet you!
Hello my Object glad to meet you!
從示例中可以看出apply()和call()能夠擴充函數賴以運行的作用域
方法的覆蓋和重寫
JavaScript中沒有方法的重載這種概念,只有覆蓋,不管方法的參數個數多少,同名的最后一個方法會將前面的方法覆蓋掉.
<script type="text/javascript">
function sayHello() {
console.log("Hello----1");
}
function sayHello() {
console.log("Hello----2");
}
function sayHello() {
console.log("Hello----3");
}
sayHello();
</script>
如果要實現重載,可采用此種方法
<script type="text/javascript">
function sayHi() {
if (arguments.length==1) {
console.log(arguments[0] + "sayHi---1");
} else if (arguments.length==2) {
console.log(arguments[0] + "," + arguments[1] + "sayHi---2");
} else if (arguments.length==3) {
console.log(arguments[0] + "," + arguments[1]+","+arguments[2] + "sayHi---3");
}
}
sayHi("Tom");
sayHi("Tom", "lucy");
sayHi("Tom","lucy","jame");
</script>
回調函數
回調函數示例
<script language="javascript" type="text/javascript">
// 2.傳入要回調的方法名
function main(callBack) {
console.log("I am main function");
console.log("Invoke callback function..");
// 3.參數名稱和此處的方法名稱對應
callBack();
}
function b() {
console.log("function:b");
}
function c() {
console.log("function:c");
}
// 1.要回調的函數作為參數
main(b);
main(c);
</script>
protocol 屬性
定義和用法
protocol 屬性是一個可讀可寫的字符串,可設置或返回當前 URL 的協議。
圖示
代碼示例
<script type="text/javascript">
document.write(location.protocol);
</script>
輸出:
http:
兩個等號和三個等號的區別
===規則:
如果類型不同,就[不相等]
如果兩個都是數值,并且是同一個值,那么[相等];(!例外)的是,如果其中至少一個是NaN,那么[不相等]。(判斷一個值是否是NaN,只能用isNaN()來判斷)
如果兩個都是字符串,每個位置的字符都一樣,那么[相等];否則[不相等]。
如果兩個值都是true,或者都是false,那么[相等]。
如果兩個值都引用同一個對象或函數,那么[相等];否則[不相等]。
如果兩個值都是null,或者都是undefined,那么[相等]。
==規則:
如果兩個值類型相同,進行===比較。
如果兩個值類型不同,他們可能相等。根據下面規則進行類型轉換再比較:
a. 如果一個是null. 一個是undefined,那么[相等]。
b. 如果一個是字符串,一個是數值,把字符串轉換成數值再進行比較。
c. 如果任一值是 true,把它轉換成 1 再比較;如果任一值是 false,把它轉換成 0 再比較。
d. 如果一個是對象,另一個是數值或字符串,把對象轉換成基礎類型的值再比較。對象轉換成基礎類型,利用它的toString或者valueOf方法。 js核心內置類,會嘗試valueOf先于toString;例外的是Date,Date利用的是toString轉換。非js核心的對象,令說(比較麻 煩,我也不大懂)
e. 任何其他組合,都[不相等]。
其他瑣碎
1. window.parent和window.opener
window.parent針對frame
window.opener針對的是打開子窗口的父窗口
可操作響應頁面的屬性和調用相關方法
2. instanceof 運算符
在 JavaScript 中,判斷一個變量的類型嘗嘗會用 typeof 運算符,在使用 typeof 運算符時采用引用類型存儲值會出現一個問題,無論引用的是什么類型的對象,它都返回 “object”。
判斷是否為數組
if(dataList instanceof Array){}console.log(Object instanceof Object);//true
console.log(Function instanceof Function);//true
console.log(Number instanceof Number);//false
console.log(String instanceof String);//false
console.log(Function instanceof Object);//true
console.log(Foo instanceof Function);//true
console.log(Foo instanceof Foo);//false
3. 判斷是否為空對象
function isEmptyObject(obj) { for (var key in obj) { return false; } return true;}
attr();本身是設置標簽屬性用的,這里用來設置樣式和獲取樣式。
addClass();這個是追加樣式。
removeClass();這是移除樣式。
toggleClass();這是切換樣式,切換的意思很簡單,有就刪除,沒有就追加。
hasClass();判斷樣式是否存在。
一、我們先做一個盒子,給它最基本的樣式,就是寬和高。
二、忘記了,還要鏈接jQuery庫,我們就連官網的庫吧。
三、現在打開網頁什么都看不見,我們加個按鈕“添加紅色背景”,同時也添加一個樣式addred。
四、現在可以添加按鈕的點擊事件了,點擊事件先留個空,一步一步來。
五、接下來可以在事件里面放操作了,這里就給box追加樣式addred。
六、后面就不啰嗦了,一口氣直接再添加三個按鈕,三個空的點擊事件。
七、先試著去掉背景。
八、忘記了,還要添加一個邊框樣式togborder。
九、toggleClass()它是有則刪,無則加,所以稱為切換。
十、hasClass()是判斷樣式是否存在,這里我們用alert消息框輸出結果。
十一、忘記一個方法了,那就是attr(),再加一個按鈕,再加一個點擊事件。
本文來源于,落筆承冰原創,下面是源碼。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。