jQuery 初入門

其實在沒有接觸一件東西之前,總是感覺它很神祕,會感覺學習起來很困難,的確是如此。不只是感覺,是真的很困難。
雖然每一門編程語言都有相似的地方,c,java,scala,php,JavaScript,python,但是想要學好真的好難。

簡介

jQuery 並不是一門新語言,它是一個 JavaScript 庫。極大地簡化了 JavaScript 編程。
它的語法也有自己的風格

jquery手冊

通過jQuery,可以選取(查詢,query)HTML元素,並對它們進行操作(actions)

jQuery 使用的語法是 XPath 與 CSS 選擇器語法的組合。
在使用jquery之前,必須要對html和css,js有一定了解。

基礎語法

$(selector).action()
  • 選擇符(selector)“查詢"和"查找” HTML 元素
  • jQuery 的 action() 執行對元素的操作

例如:

$(this).hide() - 隱藏當前元素

$("p").hide() - 隱藏所有 <p> 元素

$("p.test").hide() - 隱藏所有 class="test"<p> 元素

$("#test").hide() - 隱藏 id="test" 的元素

文檔就緒事件:

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

這是爲了防止文檔在完全加載(就緒)之前運行 jQuery 代碼,即在 DOM 加載完成後纔可以對 DOM 進行操作。
如果在文檔沒有完全加載之前就運行函數,操作可能失敗
上面的寫法的簡寫爲:

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

jQuery選擇器

jQuery 選擇器允許您對 HTML 元素組或單個元素進行操作。
jQuery 選擇器基於元素的 id、類、類型、屬性、屬性值等"查找"(或選擇)HTML 元素。 它基於已經存在的 CSS 選擇器,除此之外,它還有一些自定義的選擇器。

jQuery 中所有選擇器都以美元符號開頭:$()。

元素選擇器

根據元素名選擇元素
如選擇頁面中所有

元素:

$("p")

看一個例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鳥教程(runoob.com)</title> 
	<script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js">
	</script>
	<script>
		$(document).ready(function(){
			$("button").click(function(){
				$("p").hide();
				$("button").hide();
				$("h2").hide();
			});
		});
	</script>
</head>

<body>
	<h2>標題</h2>
	<p>段落1。</p>
	<p>段落2。</p>
	<button>點此隱藏</button>
</body>
</html>

#id 選擇器

通過HTML元素的id屬性選取指定的元素
和css一樣,注意id 前面要加 # ,而且頁面中元素的id 是唯一的。

$("#id")

.clsss選擇器

通過HTML元素的 class屬性 選取指定的元素

$(".class")

更多實例

語法 描述
$("*") 選取所有元素
$(this) 選取當前 HTML 元素
$(“p.intro”) 選取 class 爲 intro 的 <p> 元素
$(“p:first”) 選取第一個 <p> 元素
$(“ul li:first”) 選取第一個 <ul> 元素的第一個 <li> 元素
$(“ul li:first-child”) 選取每個 <ul> 元素的第一個 <li> 元素
$("[href]") 選取帶有 href 屬性的元素
$(“a[target=’_blank’]”) 選取所有 target 屬性值等於 “_blank” 的 <a> 元素
$(“a[target!=’_blank’]”) 選取所有 target 屬性值不等於 “_blank” 的 <a> 元素
$(":button") 選取所有 type=“button” 的 <input> 元素 和 <button> 元素
$(“tr:even”) 選取偶數位置的 <tr> 元素
$(“tr:odd”) 選取奇數位置的 <tr> 元素

jQuery事件

jQuery 是爲事件處理特別設計的。

什麼是事件?
頁面對不同訪問者的響應叫做事件。

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

  • 在元素上移動鼠標。
  • 選取單選按鈕
  • -點擊元素
    常見DOM事件
鼠標事件 鍵盤事件 表單事件 文檔/窗口事件
click keypress submit load
dblclick keydown change resize
mouseenter keyup focus scroll
mouseleave blur unload
hover

jQuery 事件方法語法

在 jQuery 中,大多數 DOM 事件都有一個等效的 jQuery 方法。
如頁面中指定一個點擊事件:

$("p").click();

下一步是定義什麼時間觸發事件。您可以通過一個事件函數實現:

$("p").click(function(){
    // 動作觸發後執行的代碼!!
});

常用jQuery事件方法

$(document).ready()

$(document).ready() 方法允許我們在文檔完全加載完後執行函數。該事件方法在 jQuery 語法 章節中已經提到過

click()

click() 方法是當按鈕點擊事件被觸發時會調用一個函數。
該函數在用戶點擊 HTML 元素時執行。

$("p").click(function(){
  $(this).hide();
});

dblclick()

當雙擊元素時,會發生 dblclick 事件。
dblclick() 方法觸發 dblclick 事件,或規定當發生 dblclick 事件時運行的函數,用法和click()類似

$("p").dblclick(function(){
  $(this).hide();
});

mouseenter()

當鼠標指針穿過元素時,會發生 mouseenter 事件。
mouseenter() 方法觸發 mouseenter 事件,或規定當發生 mouseenter 事件時運行的函數:
和css 中的house不同,house是暫時的,而mouseenter是永久的

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鳥教程(runoob.com)</title> 
	<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
	</script>
	<script>
		$(document).ready(function(){
		  $("#p1").mouseenter(function(){
			alert('您的鼠標移到了 id="p1" 的元素上!');
		  });
		});
	</script>
</head>
<body>
	<p id="p1">鼠標指針進入此處,會看到彈窗。</p>
</body>
</html>

mouseleave()

當鼠標指針離開元素時,會發生 mouseleave 事件。
mouseleave() 方法觸發 mouseleave 事件,或規定當發生 mouseleave 事件時運行的函數:

$("#p1").mouseleave(function(){
    alert("再見,您的鼠標離開了該段落。");
});

只有鼠標離開元素時纔會觸發該事件,如果鼠標根本沒有觸碰到元素,也就沒有離開元素的事件。

mousedown()

當鼠標指針移動到元素上方,並按下鼠標按鍵時,會發生 mousedown 事件。
和click() 事件類似
mousedown() 方法觸發 mousedown 事件,或規定當發生 mousedown 事件時運行的函數:

$("#p1").mousedown(function(){
    alert("鼠標在該段落上按下!");
});

mouseup()

當在元素上鬆開鼠標按鈕時,會發生 mouseup 事件。
mouseup() 方法觸發 mouseup 事件,或規定當發生 mouseup 事件時運行的函數:

$("#p1").mouseup(function(){
    alert("鼠標在段落上鬆開。");
});

hover()

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

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

focus()

當元素獲得焦點時,發生 focus 事件。
當通過鼠標點擊選中元素或通過 tab 鍵定位到元素時,該元素就會獲得焦點。
focus() 方法觸發 focus 事件,或規定當發生 focus 事件時運行的函數:

$("input").focus(function(){
  $(this).css("background-color","#cccccc");
});

blur()

當元素失去焦點時,發生 blur 事件。
blur() 方法觸發 blur 事件,或規定當發生 blur 事件時運行的函數:

$("input").blur(function(){
  $(this).css("background-color","#ffffff");
});

jQuery 效果

方法 效果
hide() 隱藏元素
show() 顯示元素
toggle() 切換hide() 和show() 方法
fadeIn() 元素淡入
fadeOut() 元素淡出
fadeToggle() 切換fadeIn()和fadeOut() 方法
fadeTo() 漸變
slideDown() 向下滑動元素
slideUp() 向上滑動元素
slideToggle() 切換slideDown() 和slideUp() 方法
animate() 創建自定義動畫
stop() 停止動畫
callback 在當前動畫完成後執行

jQuery 中可以使用 . 來鏈接多個效果

jQuery HTML

前面說過:jQuery 並不是一門新語言,它是一個 JavaScript 庫。極大地簡化了 JavaScript 編程。
所以jQuery 擁有可操作 HTML 元素和屬性的強大方法。

DOM

DOM (Document Object Model) 譯爲文檔對象模型,是 HTML 和 XML 文檔的編程接口。

HTML DOM 定義了訪問和操作 HTML 文檔的標準方法。
DOM 以樹結構表達 HTML 文檔。
在這裏插入圖片描述

獲得內容 -text(), html(), val()

三個簡單實用的用於 DOM 操作的 jQuery 方法:

  • text() - 設置或返回所選元素的文本內容
  • html() - 設置或返回所選元素的內容(包括 HTML 標記)
  • val() - 設置或返回表單字段的值

使用text,html獲取元素內容

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <script src="jquery.min.js">
    </script>
    <script>
        $(document).ready(function(){
            $("#btn1").click(function(){
                document.getElementById("showtext").innerHTML = "Text: " + $("#test").text();
            }());
            $("#btn2").click(function(){
                document.getElementById("showhtml").innerHTML = "HTML: " + $("#test").html();
            }());
        });
    </script>
</head>

<body>
	<p id="test">這是段落中的 <b>粗體</b> 文本。</p>
	<button id="btn1">顯示文本</button>
	<button id="btn2">顯示 HTML</button>
	<p id="showtext"> </p>
	<p id="showhtml"> </p>
</body>
</html>

在這裏插入圖片描述

使用val 獲取輸入字段的值。

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
    $(document).ready(function(){
        $("button").click(function(){
            document.getElementById("show").innerHTML = $("#test").val();
        });
    });
</script>
</head>
<body>
    <p>名稱: <input type="text" id="test" value="菜鳥教程"></p>
    <button>顯示值</button>
	<p id="show"></p>
</body>
</html>

結果:
在這裏插入圖片描述在這裏插入圖片描述

使用attr獲取屬性值

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                document.getElementById("show").innerHTML = $("#baidu").attr("href");
            });
        });
    </script>
</head>

<body>
    <p><a href="https://www.baidu.com" id="baidu">百度</a></p>
    <button>顯示 href 屬性的值</button>
    <p id="show"></p>
</body>
</html>

在這裏插入圖片描述
attr 和 prop 的區別介紹:

  • 對於 HTML 元素本身就帶有的固有屬性,在處理時,使用 prop 方法。
  • 對於 HTML 元素我們自己自定義的 DOM 屬性,在處理時,使用 attr 方法。

設置內容

可以通過 text() , html(), val() 設置內容

  • text() - 設置或返回所選元素的文本內容
  • html() - 設置或返回所選元素的內容(包括 HTML 標記)
  • val() - 設置或返回表單字段的值
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
        $(document).ready(function(){
            $("#btn1").click(function(){
                $("#test1").text("旭哥好帥!");
            });
            $("#btn2").click(function(){
                $("#test2").html("<b>旭哥好帥!</b>");
            });
            $("#btn3").click(function(){
                $("#test3").val("旭哥好帥");
            });
        });
    </script>
</head><body>
    <p id="test1">Hello</p>
    <p id="test2">Hello</p>
    <p>輸入框: <input type="text" id="test3" value="Hello"></p>
    <button id="btn1">text設置</button>
    <button id="btn2">html設置</button>
    <button id="btn3">val設置</button>
</body>
</html>

在這裏插入圖片描述
在這裏插入圖片描述
也可以通過attr設置屬性

$("button").click(function(){
    $("#runoob").attr("href","http://www.runoob.com/jquery");
  });

增刪元素

添加元素

  • append() - 在被選元素的結尾插入內容
  • prepend() - 在被選元素的開頭插入內容
  • after() - 在被選元素之後插入內容
  • before() - 在被選元素之前插入內容

上面的方法都可以同時添加多個元素

append/prepend 實在選擇元素內部嵌入,

<p> prepend嵌入的內容  原本的文檔  append嵌入的內容</p>

after/before是在元素外面追加
before 追加的內容

原本的文檔

after追加的內容

刪除元素

刪除元素和內容,可以使用以下兩個方法

  • remove() 刪除被選元素(及其子元素)
  • empty() 刪除被選元素的子元素,但是不刪除被選元素,即使被選元素爲空
$("#div1").remove();     //刪除id爲dive1的元素
$("p").remove(".italic");//刪除所有class爲itable的元素

$("#div2").empty();//刪除id爲div2的元素的子元素

jQuery CSS

CSS類

jQuery 可以使用下面方法操作CSS

  • addClass() - 向被選元素添加一個或多個類
  • removeClass() - 從被選元素刪除一個或多個類
  • toggleClass() - 對被選元素進行添加/刪除類的切換操作
  • css() - 設置或返回樣式屬性

addClass()

向被選元素添加一個或多個類

<style type="text/css">
.important
{
	font-weight:bold;
	font-size:xx-large;
}
.blue
{
	color:blue;
}
</style>
.......
<script>
	$("button").click(function(){
	  $("h1,h2").addClass("blue");
	  $("div").addClass("important");
	  $("p").addClass("important blue");
	});
</script>
......

removeClass()

刪除指定的 class 屬性:

$("button").click(function(){
  $("h1,h2,p").removeClass("blue");
});

toggleClass()

該方法對被選元素進行添加/刪除類的切換操作:

$("button").click(function(){
  $("h1,h2,p").toggleClass("blue");
});

css() 方法

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

返回CSS屬性的值

將返回首個匹配元素(p)的 background-color 值:

$("p").css("background-color");

設置CSS屬性

所有匹配元素設置 background-color 值:

$("p").css("background-color","yellow");

設置多個 CSS 屬性

設置多個 CSS 屬性,使用如下語法:
css({"propertyname":"value","propertyname":"value",...});

下面的例子將爲所有匹配元素設置 background-color 和 font-size:

$("p").css({"background-color":"yellow","font-size":"200%"});

jQuery 尺寸

  • width() 設置或返回元素的寬度(不包括內邊距、邊框或外邊距)。
  • height() 設置或返回元素的高度(不包括內邊距、邊框或外邊距)。
  • innerWidth() 返回元素的寬度(包括內邊距)。
  • innerHeight() 返回元素的高度(包括內邊距)。
  • outerWidth() 返回元素的寬度(包括內邊距和邊框)。
  • outerHeight() 返回元素的高度(包括內邊距和邊框)。
    在這裏插入圖片描述

jQuery 遍歷元素

Query 遍歷,意爲"移動",用於根據其相對於其他元素的關係來"查找"(或選取)HTML 元素。以某項選擇開始,並沿着這個選擇移動,直到抵達您期望的元素爲止。
在這裏插入圖片描述

  • 元素是
      的父元素,同時是其中所有內容的祖先。
    • 元素是
    • 元素的父元素,同時是
      的子元素
    • 左邊的
    • 元素是 的父元素,
        的子元素,同時是
        的後代。
    • 元素是
    • 的子元素,同時是
        的後代。
    • 兩個
    • 元素是同胞(擁有相同的父元素)。
    • 右邊的
    • 元素是 的父元素,
        的子元素,同時是
        的後代。
    • 元素是右邊的
    • 的子元素,同時是
        的後代。

注意,遍歷的結果返回的是元素

向上遍歷 DOM 樹(遍歷祖先)

下面這些 jQuery 方法用於向上遍歷 DOM 樹:

  • parent()
  • parents()
  • parentsUntil()

jQuery parent() 方法

parent() 方法返回被選元素的直接父元素。
該方法只會向上一級對 DOM 樹進行遍歷。
下面的例子返回每個 <span> 元素的直接父元素:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<style>
	.ancestors *
	{ 
		display: block;
		border: 2px solid lightgrey;
		color: lightgrey;
		padding: 5px;
		margin: 15px;
	}
	</style>
	<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
	</script>
	<script>
	$(document).ready(function(){
	  $("span").parent().css({"color":"red","border":"2px solid red"});
	});
	</script>
</head>
<body>

	<div class="ancestors">
	  <div style="width:500px;">div (曾祖父元素)
	    <ul>ul (祖父元素)  
	      <li>li (父元素)
	        <span>span</span>
	      </li>
	    </ul>   
	  </div>
	
	  <div style="width:500px;">div (祖父元素)   
	    <p>p (父元素)
	        <span>span</span>
	      </p> 
	  </div>
	</div>

</body>
</html>

在這裏插入圖片描述

jQuery parents() 方法

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

下面的例子返回所有 <span> 元素的所有祖先:

$(document).ready(function(){
  $("span").parents();
});

您也可以使用可選參數來過濾對祖先元素的搜索。

下面的例子返回所有 元素的所有祖先,並且它是 <ul> 元素:

$(document).ready(function(){
  $("span").parents("ul");
});

jQuery parentsUntil() 方法

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

下面的例子返回介於

元素之間的所有祖先元素:

$(document).ready(function(){
  $("span").parentsUntil("div");
});

向下遍歷 DOM 樹(遍歷後代)

  • children()
  • find()

jQuery children() 方法

children() 方法返回被選元素的所有直接子元素。
該方法只會向下一級對 DOM 樹進行遍歷。

$(document).ready(function(){
  $("div").children();
});

在這裏插入圖片描述
可以使用可選參數來過濾對子元素的搜索。
下面的例子返回類名爲 “1” 的所有 <p> 元素,並且它們是 <div> 的直接子元素:

$(document).ready(function(){
  $("div").children("p.1");
});

在這裏插入圖片描述

在 DOM 樹中水平遍歷(遍歷同胞)

siblings()

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

$(document).ready(function(){
  $("h2").siblings();
  //$("h2").siblings("p");  返回h2同胞元素中所有的<p> 元素
});

next()

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

$(document).ready(function(){
  $("h2").next();
});

nextAll()

nextAll() 方法返回被選元素的所有跟隨的同胞元素。
下面的例子返回 <h2> 的所有跟隨的同胞元素:

$(document).ready(function(){
  $("h2").nextAll();
});

nextUntil()

nextUntil() 方法返回介於兩個給定參數之間的所有跟隨的同胞元素。
下面的例子返回介於 <h2><h6> 元素之間的所有同胞元素:

$(document).ready(function(){
  $("h2").nextUntil("h6");
});

prev(), prevAll(), prevUntil()

prev(), prevAll() 以及 prevUntil() 方法的工作方式與上面的方法類似,只不過方向相反而已:它們返回的是前面的同胞元素(在 DOM 樹中沿着同胞之前元素遍歷,而不是之後元素遍歷)。

jQuery - AJAX

方法手冊

jQuery - AJAX load()

load() 方法從服務器加載數據,並把返回的數據放入被選元素中。

$(selector).load(URL,data,callback);
  • url: 必須 待加載的URL,可以將選擇器添加到URL參數。
    如:$("#div1").load("test.txt #p1");將文件中id=“p1” 的元素的內容,加載到id=“div1” 的元素中。
  • data : 可選,與請求一同發送的查詢字符串鍵值對集合
  • callback : 可選是 load() 方法完成後所執行的函數名稱。

看下面這個例子,當點擊按鈕時,會加載文件中的內容,並將其設置到id=div1的元素中。

$(document).ready(function(){
	$("button").click(function(){
		$("#div1").load("test.txt");
	});
});

可選的 callback 參數規定當 load() 方法完成後所要允許的回調函數。回調函數可以設置不同的參數:

  • responseTxt - 包含調用成功時的結果內容
  • statusTXT - 包含調用的狀態
  • xhr - 包含 XMLHttpRequest 對象
$(document).ready(function(){
  $("button").click(function(){
    $("#div1").load("test.txt",function(responseTxt,statusTxt,xhr){
      if(statusTxt=="success")
        alert("外部內容加載成功!");
      if(statusTxt=="error")
        alert("Error: "+xhr.status+": "+xhr.statusText);
    });
  });
});

jQuery - AJAX get() 和 post() 方法

jQuery get() 和 post() 方法用於通過 HTTP GET 或 POST 請求從服務器請求數據。

HTTP 請求:GET vs. POST

兩種在客戶端和服務器端進行請求-響應的常用方法是:GET 和 POST。

  • GET - 從指定的資源請求數據
  • POST - 向指定的資源提交要處理的數據

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

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

jQuery $.get() 方法

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

$.get(URL,callback);
  • URL 請求的URL
  • callback 請求成功後執行的函數名

有這樣一個php文件:
test.php

<?php
	echo '這是個從PHP文件中讀取的數據。';
?>

可以使用get方法從中讀取數據:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>菜鳥教程(runoob.com)</title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                $.get("/try/test.php",function(data,status){
                    document.getElementById("show").innerHTML = "數據: " + data + "\n狀態: " + status;
                });
            });
        });
    </script>
</head>
<body>
    <button>發送一個 HTTP GET 請求並獲取返回結果</button>
    <P id="show"></P>
</body>
</html>

jQuery $.post() 方法

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

$.post(URL,data,callback);
  • URL 希望請求的 URL。
  • data 連同請求發送的數據。
  • callback 請求成功後所執行的函數名。

下面的例子使用 $.post() 連同請求一起發送數據:

回調函數中。第一個回調參數存有被請求頁面的內容,而第二個參數存有請求的狀態。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>菜鳥教程(runoob.com)</title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                $.post("test_post.php",{
                    name:"旭哥",
                    password:"旭哥好帥"
                },//這是傳遞的數據
                function(data,status){
                    alert("數據: \n" + data + "\n狀態: " + status);
                });//請求成功後執行的函數,data 是被請求頁面的內容,status是請求的狀態
            });
        });
    </script>
</head>
<body>
    <button>發送一個 HTTP POST 請求頁面並獲取返回內容</button>
</body>
</html>

test_post.php文件:
php文件接受傳過來的數據,並進行處理

<?php
    $name = isset($_POST['name']) ? htmlspecialchars($_POST['name']) : '';
    $password = isset($_POST['password']) ? htmlspecialchars($_POST['password']) : '';
    echo '輸入的用戶名: ' . $name;
    echo "\n";
    echo '輸入的密碼: ' .$password;
?>

更多方法

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