JQuery學習筆記

一. jQuery教程

1. jQuery簡介

​ jQuery是一個JavaScript函數庫。

​ 宗旨:“寫的少,做的多”。

​ jQuery 的功能概括

​ 1、html 的元素選取

​ 2、html的元素操作

​ 3、html dom遍歷和修改

​ 4、js特效和動畫效果

​ 5、css操作

​ 6、html事件操作

​ 7、ajax異步請求方式

​ 8、Utilities

2. jQuery引用方式

​ 1. 從 jquery.com 下載 jQuery 庫並安裝

​ Production version - 用於實際的網站中,已被精簡和壓縮。

​ Development version - 用於測試和開發(未壓縮,是可讀的代碼)

<head>
	<script src="jquery-1.10.2.min.js" type="text/javascript></script>
</head>
/* 在 HTML5 中,可以不必添加type="text/javascript。因爲JavaScript 是 HTML5 以及所有現代瀏覽器中的默認腳本語言!*/

​ 2. 通過 CDN(內容分發網絡) 引用

​ BootCDN、百度、又拍雲、新浪、谷歌和微軟的服務器都存有 jQuery

// 例如BootCDN
<head>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
</script>
</head>jQuery引用方式

3. jQuery語法

基礎語法:$(selector).action()

​ $: jQuery標識符

​ selector: 選擇符,查詢和查找HTML元素

​ action(): 執行對元素的操作

實例:
	$(this).hide() - 隱藏當前元素
	$("p").hide() - 隱藏所有 <p> 元素
	$("p.test").hide() - 隱藏所有 class="test" 的 <p> 元素
	$("#test").hide() - 隱藏所有 id="test" 的元素

jQuery入口函數(文檔就緒事件):

​ 爲了防止文檔在完全加載(就緒)之前運行 jQuery 代碼,即在 DOM (所有HTML標籤)加載完成後纔可以對 DOM 進行操作。如果在文檔沒有完全加載之前就運行函數,操作可能失敗。

$(document).ready(function(){
    //  開始寫jQuery代碼...
});

//   更簡潔的寫法
$(function(){
    // 寫代碼...
})

javaScript入口函數

​ JavaScript 的 window.onload 事件是等到所有內容,包括外部圖片之類的文件加載完後,纔會執行。

window.onload = function(){
    // 執行代碼
}

4. jQuery選擇器

​ 基於已存在的css選擇器和一些自定義的選擇器

元素選擇器(標籤選擇器)

$(document).ready(function(){
  $("button").click(function(){       // 選中所有button標籤   點擊事件
    $("p").hide();                    // 選擇所有p標籤   隱藏方法
  });
});

#id 選擇器

$(document).ready(function(){
    $("button").click(function(){
        $("#test").hide();
    });
});

.class 選擇器

$(document),ready(function(){
    $("button").click(function(){
        $(".test").hide();
    });
});

等多實例:

​ $("*") 選取所有元素

​ $(this) 選取當前元素 例如點擊事件爲一個按鈕,那麼當前元素就是該按鈕

​ $(“p.test”) 選取class=test的

標籤元素

​ $(“p:first”) 選取所有

標籤中的第一個

​ $(“ul li:first”) 選取第一個

    元素的第一個
  • 元素

​ $(“ul li:first-child”) 選取每個

    元素的第一個
  • 元素

$("[href]") 選取帶有href屬性的元素 屬性選擇器,注意有中括號

​ $(“a[target=’_blank’]”) 選取所有target屬性值爲’_blank’的標籤元素

​ $(":button") 選取所有type="button"的元素和元素

​ $(“button”) 選取所有標籤元素

​ $(“tr:even”) 選取偶數位置的元素 包含表頭

​ $(“tr:odd”) 選取奇數位置的元素 不包含表頭

5. jQuery事件

​ 事件就是頁面對不同訪問者的響應;

​ 事件處理程序就是指當HTML中發生某些事件時所調用的方法;

常見DOM事件:

鼠標事件:

​ click:當單擊元素時,發生 click 事件。

$("p").click(function(){
    alert("段落被點擊了");
});
//  click()方法觸發click事件,function可選,規定點擊事件發生時運行的函數

​ dbclick:用法類似單擊,僅當雙擊時觸發。

​ mouseenter:當鼠標指針穿過(進入)被選元素時,會發生 mouseenter 事件。

​ mouseleave:當鼠標指針離開被選元素時,會發生 mouseleave 事件。

$(document).ready(function(){
  $("p").mouseenter(function(){
    $("p").css("background-color","yellow");
  });
  $("p").mouseleave(function(){
    $("p").css("background-color","lightgray");
  });
});
//  mouseenter事件一般與mouseleave事件一起使用

**注意:**mouseenter事件與 mouseover 事件不同,mouseenter 事件只有在鼠標指針進入被選元素時被觸發,mouseover 事件在鼠標指針進入任意子元素時也會被觸發。

​ mouseleave事件與 mouseout 事件不同,mouseleave 事件只有在鼠標指針離開被選元素時被觸發,mouseout 事件在鼠標指針離開任意子元素時也會被觸發。

​ mousedown:當鼠標指針移動到元素上方,並按下鼠標按鍵時,會發生 mousedown 事件。

​ mouseup:當在元素上鬆開鼠標按鈕時,會發生 mouseup 事件。

​ hover()方法用於模擬光標懸停事件,當鼠標移動到元素上時,會觸發指定的第一個函數(mouseenter);當鼠標移出這個元素時,會觸發指定的第二個函數(mouseleave)。

$("#p1").hover(
		function(){
			alert("你進入了 p1!");
		},
		function(){
			alert("拜拜! 現在你離開了 p1!");
		}
    )

鍵盤事件:

​ keypress:鍵被按下(不會觸發所有的鍵,例如ALT、CTRL、SHIFT、ESC等)

$("input").keypress(function(){
    $("span").text(i+=1);
});

​ keydown:鍵按下的過程 (event.which屬性返回被按下鍵的鍵碼,若是keypress事件則拿到ASCII碼) 兼容性問題有時候是keyCode

$("input").keydown(function(event){
    $("div").html("key:" + event.which);
});

​ keyup:鍵被鬆開

$("input").keydown(function(){
    $("input").css("background-color","yellow");
  });
  $("input").keyup(function(){
    $("input").css("background-color","pink");
  });

​ 三種鍵盤事件的區別:

  • 1.keydown:在鍵盤上按下某鍵時發生,一直按着則會不斷觸發(opera瀏覽器除外), 它返回的是鍵盤代碼;

  • 2.keypress:在鍵盤上按下一個按鍵,併產生一個字符時發生, 返回ASCII碼。注意: shift、alt、ctrl等鍵按下並不會產生字符,所以監聽無效 ,換句話說, 只有按下能在屏幕上輸出字符的按鍵時keypress事件纔會觸發。若一直按着某按鍵則會不斷觸發。

  • 3.keyup:用戶鬆開某一個按鍵時觸發, 與keydown相對, 返回鍵盤代碼.

    傳遞數據給事件處理函數

    
    var validKeys = { start: 65, end: 90  };
    $("#keys").keydown( validKeys, function(event){
        var keys = event.data;  //拿到validKeys對象.
        return event.which >= keys.start && event.which <= keys.end;
    } );
    

    表單事件:

    ​ submit:提交表單時會觸發submit事件,該事件只適用於元素

$("form").submit(function(){
    alert("是否確認提交?");
});

​ 阻止submit按鈕的默認行爲(使用event.preventDefault()方法阻止表單被提交):

$("form").submit(function(event){
    event.preventDefault();
    alert("阻止表單提交");
  });

​ change: 當元素的值改變時觸發 change 事件(僅適用於表單字段)。

$("input").change(function(){
    alert("文本已被修改");
});
//  當input輸入框中輸入內容然後按下回車或者點擊輸入框外部時,change事件觸發

​ focus:當元素獲得焦點時(當通過鼠標點擊選中元素或通過 tab 鍵定位到元素時),發生 focus 事件。

$("input").focus(function(){
    $("span").css("display","inline").fadeOut(2000);
  });
//  輸入框獲得焦點時,<span>標籤元素的css樣式改爲行內塊元素,2秒內淡出

​ blur:當元素失去焦點時觸發blur事件。

$("input").blur(function(){
    alert("輸入框失去了焦點");
  });

文檔/窗口事件:

​ load:當指定的元素已加載時,觸發改事件;該事件適用於任何帶有 URL 的元素(比如圖像、腳本、框架、內聯框架)以及 window 對象。根據不同的瀏覽器(Firefox 和 IE),如果圖像已被緩存,則也許不會觸發 load 事件。

​ load()方法在jQuery1.8版本已廢棄!!!

$("img").load(function(){
    alert("圖片已載入");
  });

​ unload:當用戶離開頁面時,會發生 unload 事件。unload() 方法只應用於 window 對象。

​ 當發生以下情況下,會觸發 unload 事件:

​ 點擊某個離開頁面的鏈接

​ 在地址欄中鍵入了新的 URL

​ 使用前進或後退按鈕

​ 關閉瀏覽器窗口

​ 重新加載頁面

​ unload() 方法在 jQuery 版本 1.8 中被廢棄,在 3.0 版本被移除!!!!!!!!!

​ resize: 當調整瀏覽器窗口大小時,發生 resize 事件。

$(window).resize(function(){
    $("span").text(x+=1);
  });
  // 統計窗口大小調整的次數(窗口大小變化過程中實時變化)

​ scroll:當用戶滾動指定的元素時,會發生 scroll 事件。scroll 事件適用於所有可滾動的元素和 window 對象(瀏覽器窗口)。

 $("div").scroll(function(){
    $("span").text(x+=1);
  });
// 滾動統計意義不大

二、jQuery效果

1. 隱藏/顯示

​ 簡單的hide()方法:

$(document).ready(function(){
  $("p").click(function(){
    $(this).hide();
  });
});
// 點擊當前元素即可隱藏

​ 隱藏文本(不止在某一個標籤中):

$(document).ready(function(){
  $(".ex .hide").click(function(){
    $(this).parents(".ex").hide("slow");
  });
});

​ 隱藏與顯示:

$(document).ready(function(){
  $("#hide").click(function(){
    $("p").hide();
  });
  $("#show").click(function(){
    $("p").show();
  });
});

​ 帶參數的隱藏與顯示:

​ $(selector).hide(speed, callback); show也一樣

​ 可選的 speed 參數規定隱藏/顯示的速度,可以取以下值:“slow”、“fast” 或毫秒。

可選的 callback 參數說明:

​ 1.$(selector)選中的元素的個數爲n個,則callback函數會執行n次;

​ 2.callback函數名後加括號,會立刻執行函數體,而不是等到顯示/隱藏完成後才執行,只

​ 會調用一次, 如果不加括號,元素顯示或隱藏後調用函數,纔會調用多次;

​ 3.callback既可以是函數名,也可以是匿名函數;

​ toggle()方法切換隱藏與顯示:

​ $(selector).toggle(speed, callback);

$(document).ready(function(){
  $("button").click(function(){
    $("p").toggle();
  });
});
### 2. 淡入淡出

​ fadeIn(): $(selector).fadeIn(speed, callback);

​ 可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。.

​ 可選的 callback 參數是 fading 完成後所執行的函數名稱。

​ fadeOut(): 語法及參數相同,用法相同。

​ fadeToggle(): 切換淡入淡出,參數與用法相同。

​ fadeTo(): 漸變爲給定的不透明度(值介於 0 與 1 之間)

​ $(selector).fadeTo(speed,opacity,callback);

​ 必需的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。

​ 必需的 opacity 參數將淡入淡出效果設置爲給定的不透明度(值介於 0 與 1 之間)。

​ 可選的 callback 參數是該函數完成後所執行的函數名稱。

$(document).ready(function(){
  $("button").click(function(){
    $("#div1").fadeTo("slow",0.15);
    $("#div2").fadeTo("slow",0.4);
    $("#div3").fadeTo("slow",0.7);
  });
});
//  0爲完全透明,1爲不透明,保持原本顏色

3. 滑動(摺疊)

​ slideDown(): 向下滑動元素; 下拉

​ $(selector).slideDown(speed, callback); 參數及用法相同

​ slideUp(): 向上滑動元素; 收起

$(document).ready(function(){
  $("#flip").click(function(){
    $("#panel").slideUp("slow");
  });
});

​ slideToggle(): 切換上滑下滑狀態

4. 動畫

​ animate(): 創建自定義動畫;

​ $(selector).animate({params}, speeed, callback);

​ 必需的 params 參數定義形成動畫的 CSS 屬性。

​ 可選的 speed 參數規定效果的時長。它可以取以下值:“slow”、“fast” 或毫秒。

​ 可選的 callback 參數是動畫完成後所執行的函數名稱。

$(document).ready(function(){
  $("button").click(function(){
    $("div").animate({left:'250px'});
  });
});
//  實現div盒子右移的效果(單個屬性)
//  注意:默認情況下,所有的 HTML 元素有一個靜態的位置,且是不可移動的。 如果需要改變爲,我們需要將元素的 position 屬性設置爲 relative, fixed, 或 absolute!

​ animate(): 可以同時操作多個屬性

$(document).ready(function(){
    $("button").click(function(){
        $("div").animate({
            left:'250px',
            opacity:0.5,
            height:'150px',
            width:'150px'
        },'slow');
    });
});
//  animate()方法幾乎可以操縱所有css屬性,不過,需要記住一件重要的事情:當使用 animate() 時,必須使用 Camel 駝峯 標記法書寫所有的屬性名,比如,必須使用 paddingLeft 而不是 padding-left,使用 marginRight 而不是 margin-right,等等。同時,色彩動畫並不包含在覈心 jQuery 庫中。

​ animate(): 使用相對值(該值相對於元素的當前值)

//  代碼類似,此處只寫有變化處
$("div").animate({
    left:'250px',
    height:'+=150px',
    width:'-=150px'
});
//  由於是相對於當前值的變化,所以多次運行時將會有持續變化的效果

​ animate(): 使用預定義的值,如’show’, ‘hide’, 'toggle’等

$("div").animate({
    height:'toggle'
});

​ animate(): 使用隊列功能

$("button").click(function(){
  var div=$("div");
  div.animate({height:'300px',opacity:'0.4'},"slow");
  div.animate({width:'300px',opacity:'0.8'},"slow");
  div.animate({height:'100px',opacity:'0.4'},"slow");
  div.animate({width:'100px',opacity:'0.8'},"slow");
});
//  按順序執行一條後再執行下一條

5. 停止動畫

​ stop()方法:在動畫或效果完成之前停止,適用於所有 jQuery 效果函數,包括滑動、淡入淡出和自定義動畫等。

​ $(selector).stop(stopAll, goToEnd);

​ 可選的 stopAll 參數規定是否應該清除動畫隊列。默認是 false,即僅停止活動的動畫,允許任何排入隊列的動畫向後執行。

​ 可選的 goToEnd 參數規定是否立即完成當前動畫。默認是 false。

$("div").animate({left:'100px'},5000);
    $("div").animate({fontSize:'3em'},5000);
  });
  $("#stop").click(function(){
    $("div").stop();       //  停止當前激活動畫,後續可在此激活
  });
  $("#stop2").click(function(){
    $("div").stop(true);   //  停止所有動畫
  });
  $("#stop3").click(function(){
    $("div").stop(true,true); //停止所有動畫且顯示當前激活動畫的最終完成效果(未激活的不顯示)
  });

6. 鏈(Chaining)

​ 相同的元素上運行多條 jQuery 命令(點方法鏈接,語法不是很嚴格,可以在鏈接的過程中換行縮進)

$("#p1").css("color","red").slideUp(2000).slideDown(2000);

三、jQuery HTML

### 1. 捕獲

獲得內容:

​ text() 設置或返回所選元素的文本內容

​ html() 設置或返回所選元素的內容(包括HTML標籤)

​ val() 設置或返回表單字段的值 (即表單裏面的value值)

// 若 <p id="test">這是段落中的 <b>粗體</b> 文本。</p>
$("#btn1").click(function(){
    alert("Text:"  + $("#test").text());  // 顯示  這是段落中的 粗體 文本。
});
$("#btn2").click(function(){
    alert("HTML:"  +  $("#test").html());  // 顯示 這是段落中的 <b>粗體</b> 文本。
});

獲取屬性:

​ attr() 獲取屬性的值,例如鏈接

//  <a href="http://www.runoob.com" id="runoob"></a>
$("button").click(function(){
    alert($("#runoob").attr("href"));    // 顯示 www.runoob.com
  });
// 建議:對於 HTML 元素本身就帶有的固有屬性,在處理時,使用 prop 方法。
      // 對於 HTML 元素我們自己自定義的 DOM 屬性,在處理時,使用 attr 方法。
<a href="#" id="link1" action="delete" rel="nofollow">刪除</a>
//  這個例子裏 <a> 元素的 DOM 屬性有: href、id 和 action,很明顯,前兩個是固有屬性,而後面一個 action 屬性是我們自己自定義上去的,<a> 元素本身是沒有這個屬性的。

2. 設置

設置內容:

​ text() html() val() 直接在括號裏面放入想要設置的內容

$("#btn1").click(function(){
    $("#test1").text("Hello world!");
  });
  $("#btn2").click(function(){
    $("#test2").html("<b>Hello world!</b>");
  });
  $("#btn3").click(function(){
    $("#test3").val("RUNOOB");
  });

text()、html() 以及 val() 的回調函數

​ 回調函數有兩個參數:被選元素列表中當前元素的下標,以及原始(舊的)值。然後以函數新值返回您希望使用的字符串。

$(document).ready(function(){
  $("#btn1").click(function(){
    $("#test1").text(function(i,origText){    //  origText 原始文本,i 原始文本下標
      return "舊文本: " + origText + " 新文本: Hello world! (index: " + i + ")"; 
    });
  });

  $("#btn2").click(function(){
    $("#test2").html(function(i,origText){
      return "舊 html: " + origText + " 新 html: Hello <b>world!</b> (index: " + i + ")"; 
    });
  });

});

設置屬性:

​ attr() 可以同時設置多個屬性值

$("button").click(function(){
    $("#runoob").attr({             
        "href": "http://www.runoob.com";
        "title": "jQuery 教程"
    });
});
//  同時修改多個屬性時用字典的方式
//  修改單個屬性時
$("#runoob").attr("href", "http://www.runoob.com");

attr() 的回調函數:

$("button").click(function(){
    $("#runoob").attr("href",function(i, origValue){
        return origValue + "/jQuery";
    });
});
// 直接修改了href的鏈接地址

3. 添加元素

​ 四種添加新的HTML內容(包括文本與標籤)的jquery方法

append() :在被選元素結尾插入內容(仍然在選中元素的內部)

$("p").append("追加文本")
//  若原文本爲“段落。”,那麼新文本爲“段落。追加文本”

prepend():在被選元素的開頭插入內容(仍然在選中元素的內部)

$("p").prepend("<b>在開頭追加文本</b>")
//  顯示爲在原文本開頭加入加粗版的“在開頭追加文本”

after() :在被選元素之後插入內容(在選中元素的外部)

$("img").before("<b>之前</b>");

before():在被選元素之前插入內容(在選中元素的外部)

$("img").after("<i>之後</i>");

創建元素的幾種方法:

function appendText(){
	var txt1="<p>文本。</p>";              // 使用 HTML 標籤創建元素
	var txt2=$("<p></p>").text("文本。");  // 使用 jQuery的方法 創建元素   標籤要成對
	var txt3=document.createElement("p");     // 標籤自動補齊
	txt3.innerHTML="文本。";               // 使用 DOM 創建文本 text with DOM
	$("body").append(txt1,txt2,txt3);        // 追加新元素
}
//  三者創建出來的都是段落 “文本。”

append()/prepend()與after()/before()之間的區別:

<p>
  <span class="s1">s1</span>
</p>
<script>
$("p").append('<span class="s2">s2</span>');
</script>
// 結果是這樣的
<p>
  <span class="s1">s1</span>
  <span class="s2">s2</span>
</p>
// 而after()的結果是這樣的
<p>
  <span class="s1">s1</span>
</p>
<span class="s2">s2</span>

​ **總結:**append/prepend 是在選擇元素內部嵌入。after/before 是在元素外面添加。

4. 刪除元素

remove() - 刪除被選元素(及其子元素)

$("button").click(function(){
    $("#div").remove();
  });
  // 刪除div及其內部所有元素
  
  // 可以接受一個參數,允許對被刪元素進行過濾。
  $("p").remove(".italic");
  // 刪除所有類名爲italic的p標籤

empty() - 從被選元素中刪除子元素

$("button").click(function(){
    $("#div").empty();
  });
  // 刪除div裏面的所有元素,不包括div本身

5. CSS類

​ 通過 jQuery,可以很容易地對 CSS 元素進行操作,獲取或設置

addClass() 方法:向被選元素添加一個或多個CSS類

// 向不同的元素添加 class 屬性
$("button").click(function(){
  $("h1,h2,p").addClass("blue");
  $("div").addClass("important");
});

// 向單個元素添加多個類屬性
 $("body div:first").addClass("important blue");

removeClass() - 從被選元素刪除一個或多個類

$("h1,h2,p").removeClass("blue");

toggleClass() - 對被選元素進行添加/刪除類的切換操作

$("h1,h2,p").toggleClass("blue");
// 有則刪除,沒有則添加

6. css()方法

​ css() 方法設置或返回被選元素的一個或多個樣式屬性。

返回 CSS 屬性: 返回第一個匹配到元素的指定屬性

$("p").css("background-color");
// 若第一個匹配到的元素沒有該指定的屬性,則不返回或者返回不確定

設置 CSS 屬性:將所有匹配元素設置爲指定的屬性

$("p").css("background-color","yellow");
//   將所有p標籤 背景色 設置爲黃色,不管原標籤有沒有設置過背景色

//  同時設置多個css屬性     用字典的方式
$("p").css({"background-color":"yellow","font-size":"200%"});

7. 尺寸

​ 通過 jQuery,很容易處理元素和瀏覽器窗口的尺寸

width() 方法設置或返回元素的寬度(不包括內邊距、邊框或外邊距)。

height() 方法設置或返回元素的高度(不包括內邊距、邊框或外邊距)。

innerWidth() 方法返回元素的寬度(包括內邊距)。

innerHeight() 方法返回元素的高度(包括內邊距)。

outerWidth() 方法返回元素的寬度(包括內邊距和邊框)。

outerHeight() 方法返回元素的高度(包括內邊距和邊框)。

/* <div id="div1" style="height:100px;width:300px;padding:10px;margin:3px;border:1px solid blue;background-color:lightblue;"></div>  */

$("button").click(function(){
    var txt="";
    txt+="div 寬度: " + $("#div1").width() + "</br>";
    txt+="div 高度: " + $("#div1").height() + "</br>";
    txt+="div 寬度,包含內邊距: " + $("#div1").innerWidth() + "</br>";
    txt+="div 高度,包含內邊距: " + $("#div1").innerHeight() + "</br>";
    txt+="div 寬度,包含內邊距和邊框: " + $("#div1").outerWidth() + "</br>";
    txt+="div 高度,包含內邊距和邊框: " + $("#div1").outerHeight() + "</br>;
    
    $("#div1").html(txt);
  });
  
  /* div 寬度: 300
	div 高度: 100
	div 寬度,包含內邊距: 320
	div 高度,包含內邊距: 120
	div 寬度,包含內邊距和邊框: 322
	div 高度,包含內邊距和邊框: 122
    div 寬度,包含內邊距、邊框和外邊距: 328
	div 高度,包含內邊距、邊框和外邊距: 128
  */

四、jQuery遍歷

###1.遍歷

​ 通過 jQuery 遍歷,您能夠從被選(當前的)元素開始,輕鬆地在家族樹中向上移動(祖先),向下移動(子孫),水平移動(同胞)。這種移動被稱爲對 DOM 進行遍歷。

​ 注意:祖先是父、祖父、曾祖父等等。後代是子、孫、曾孫等等。同胞擁有相同的父。

2. 祖先

​ 用parent()、parents()、parentsUntil()等方法向上遍歷 DOM 樹,以查找元素的祖先。

parent() 方法:返回被選元素的直接父元素(一般只有一個)

//  只更改span標籤的直接父級元素的樣式
$("span").parent().css({"color":"red","border":"2px solid red"});

parents() 方法:返回被選元素的所有祖先元素,它一路向上直到文檔的根元素 ()。

$("span").parents().css({"color":"red","border":"2px solid red"});
// 從span一直向上到body到html爲止

//  加參數進行過濾  只更改祖先元素中的ul
$("span").parents("ul").css({"color":"red","border":"2px solid red"});

parentsUntil() 方法:返回介於兩個給定元素之間的所有祖先元素

//  選定span,指定div,返回該兩者之間的屬於span的祖先元素
$("span").parentsUntil("div").css({"color":"red","border":"2px solid red"});

3. 後代

​ 用children()、find()向下遍歷 DOM 樹,查找後代元素

children() 方法:返回被選元素的所有直接子元素(一個或者多個)

$("div").children().css({"color":"red","border":"2px solid red"});

// 添加參數進行過濾
$("div").children("p.1").css({"color":"red","border":"2px solid red"});

find() 方法:返回被選元素的後代元素,一路向下直到最後一個後代。

// 所有後代
$("div").find("*").css({"color":"red","border":"2px solid red"});

// 指定的後代元素
$("div").find("span").css({"color":"red","border":"2px solid red"});

4. 同胞

​ 有多種方法可以在DOM樹中進行水平遍歷

siblings()方法:返回被選元素的所有同胞元素。

//  選擇h2的所有同胞元素並修改其樣式(不包括h2本身)
$("h2").siblings().css({"color":"red","border":"2px solid red"});

// 添加參數進行過濾
$("h2").siblings("p").css({"color":"red","border":"2px solid red"});

next() 方法:返回被選元素的下一個同胞元素,只會返回一個元素。

// h2的下一個同胞元素,
$("h2").next().css({"color":"red","border":"2px solid red"});

nextAll() 方法:返回被選元素的所有跟隨的同胞元素。

// h2後面的所有同胞元素
$("h2").nextAll().css({"color":"red","border":"2px solid red"});

nextUntil() 方法:返回介於兩個給定參數之間的所有跟隨的同胞元素。

// 選中的h2以及指定的h6之間的所有同胞元素
$("h2").nextUntil("h6").css({"color":"red","border":"2px solid red"});

prev(), prevAll() 以及 prevUntil() 方法的工作方式與上面的方法類似,只不過方向相反而已

5. 過濾

​ 使用方法而不是參數來過濾數據

first() 方法:返回被選元素的首個元素。

// 匹配div標籤下的p標籤,選擇其第一個
$("div p").first().css("background-color","yellow");

last() 方法:返回被選元素的最後一個元素。

// 匹配div標籤下的p標籤,選擇其最後一個
$("div p").last().css("background-color","yellow");

eq() 方法:返回被選元素中帶有指定索引號的元素。

// 匹配索引號爲1 的p標籤    <p> 攜帶索引號(index 1)。</p>
$("p").eq(1).css("background-color","yellow");

filter() 方法:返回與規定標準相匹配的元素。

// p標籤下類名爲url的所有元素
$("p").filter(".url").css("background-color","yellow");

not() 方法:返回與規定標準不匹配的所有元素。

//   p標籤下類名不爲url的所有元素
 $("p").not(".url").css("background-color","yellow");

五、Ajax

1. Ajax簡介

​ AJAX = 異步 JavaScript 和 XML

​ AJAX 是與服務器交換數據的技術,它在不重載全部頁面的情況下,實現了對部分網頁的更新。

jQuery 提供多個與 AJAX 有關的方法。

通過 jQuery AJAX 方法,您能夠使用 HTTP Get 和 HTTP Post 從遠程服務器上請求文本、HTML、XML 或 JSON - 同時您能夠把這些外部數據直接載入網頁的被選元素中。如果沒有jQuery,AJAX編程的實現有一些難度。

2. load()方法

​ jQuery load() 方法是簡單但強大的 AJAX 方法,它可以從服務器加載數據,並把返回的數據放入被選元素中。

​ 語法:$(selector).load(URL,data,callback);

必需URL 參數規定您希望加載的 URL。

​ 可選的 data 參數規定與請求一同發送的查詢字符串鍵/值對集合。

​ 可選的 callback 參數是 load() 方法完成後所執行的函數名稱。

//   加載外部文件來更改指定元素內容
$("#div1").load("/try/ajax/demo_test.txt");

//   在URL參數中添加jQuery選擇器,指定加載外部文件中id爲p1的元素
 $("#div1").load("/try/ajax/demo_test.txt #p1");

callback函數的參數:

  • responseTxt - 調用成功時所調用的結果內容
  • statusTXT - 包含調用的狀態 sucess或error
  • xhr - 包含 XMLHttpRequest 對象
//  先執行函數裏面的內容,再執行頁面上內容的更改(例如本例是先跳出彈窗)
/*  本例中responseTxt爲"demo_test.txt"裏面的內容,statusTxt爲success時,xhr.status=200,xhr.statusText=ok;而當status爲error時,xhr.status=404,xhr.statusText=pag not found(錯誤情況的一個例子)
*/
$("#div1").load("/try/ajax/demo_test.txt",function(responseTxt,statusTxt,xhr){
      if(statusTxt=="success")
        alert("外部內容加載成功!");
      if(statusTxt=="error")
        alert("Error: "+xhr.status+": "+xhr.statusText);
    });
//   

3. AJAX的get()和post()方法

​ HTTP請求GET —— 從指定的資源請求數據

​ HTTP請求POST—— 向指定的資源提交要處理的數據

GET 基本上用於從服務器獲得(取回)數據。註釋:GET 方法可能返回緩存數據。

POST 主要是提交數據,也可用於從服務器獲取數據。不過,POST 方法不會緩存數據,並且常用於連同請求一起發送數據。

$.get() 方法:通過 HTTP GET 請求從服務器上請求數據。

​ 語法 : $.get(URL, callback);

​ 必需的 URL 參數規定您希望請求的 URL。

​ 可選的 callback 參數是請求成功後所執行的函數名。

//  data爲“demo_test.php”文件裏面的內容,狀態爲請求成功success或錯誤error
$.get("/try/ajax/demo_test.php",function(data,status){
			alert("數據: " + data + "\n狀態: " + status);
		});

$.post() 方法:通過 HTTP POST 請求向服務器提交數據。

​ 語法:$.post(URL, data,callback);

​ 必需的 URL 參數規定您希望請求的 URL。

​ 可選的 data 參數規定連同請求發送的數據。字典的形式

​ 可選的 callback 參數是請求成功後所執行的函數名。

$.post("/try/ajax/demo_test_post.php",{
			name:"菜鳥教程",
			url:"http://www.runoob.com"
		},
		function(data,status){
			alert("數據: \n" + data + "\n狀態: " + status);
		});

六、jQuery的替代符號$有衝突時的解決辦法

1. jQuery 和其他 JavaScript 框架同時使用$

​ 這時候兩個框架產生衝突,$符號不知道指代誰。

​ jQuery內置的noConflict() 方法解決此問題

noConflict() 方法會釋放對 $ 標識符的控制,這樣其他腳本就可以使用它了。

//   釋放$,此時別的框架可以使用
$.noConflict();
jQuery(document).ready(function(){
  jQuery("button").click(function(){
    jQuery("p").text("jQuery 仍然在工作!");
  });
});
// 創建自定義的jQuery簡寫
var jq=$.noConflict();
jq(document).ready(function(){
  jq("button").click(function(){
    jq("p").text("jQuery 仍然在工作!");
  });
});
//  將$作爲參數傳遞後,函數內仍可以使用$,但函數外不能,只能使用jQuery
$.noConflict();
jQuery(document).ready(function($){
  $("button").click(function(){
    $("p").text("jQuery 仍然在工作!");
  });
});

七、JSONP

​ Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。爲什麼我們從不同的域(網站)訪問數據需要一個特殊的技術(JSONP )呢?這是因爲同源策略。

同源策略,它是由Netscape提出的一個著名的安全策略,現在所有支持JavaScript 的瀏覽器都會使用這個策略。

所謂同源是指,域名,協議,端口相同。瀏覽器在執行一個腳本時會檢查這個腳本屬於哪個頁面,即檢查是否同源,只有同源時,該腳本纔會在相應的瀏覽器頁面運行。

​ jQuery中使用JSON:

$.getJSON("http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data) {
    
    var html = '<ul>';
    for(var i = 0; i < data.length; i++)
    {
        html += '<li>' + data[i] + '</li>';
    }
    html += '</ul>';
    $('#divCustomers').html(html); 
});

更多方法參見jQuery手冊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章