DOM操作可分為3個方面:DOM Core(核心)、HTML DOM和CSS DOM
(1)DOM Core不屬于JavaScript語言范疇,任何一種支持DOM的程序設計語言都可以操作它,它的用于不限于處理網頁,也可以用來處理任何一種使用標記語言編寫出來的文檔,如XML。JavaScript中的createElement()
、getElementById()
和removeAttribute()
等方法都是DOM Core的組成部分。
(2)HTML DOM的出現比DOM Core要早,它提供了一些更簡明的記號來描述各種HTML元素的屬性,如訪問表單document.forms等。
(3)CSS DOM主要操作CSS。在JavaScript中,CSS DOM主要作用是獲取和設置style對象的各種屬性。通過改變style對象的各種屬性,可以使網頁呈現出不同的效果。
jQuery作為一種JavaScript庫,繼承并優化了JavaScript訪問DOM對象的特性,是開發人員更加方便的操作DOM對象。
1、創建節點
在Web開發中,要創建動態網頁內容,主要操作的節點包括元素、屬性和文本。
- 創建元素:DOM中的
createElement()
方法能夠根據參數指定的標簽名稱創建一個新的元素,并返回新建元素的引用。在jQuery中,簡化了DOM操作,直接使用構造函數$()
創建元素對象。用法:$(html)
,該函數能夠根據參數html所傳遞的HTML字符串,創建一個DOM對象,并將該對象包裝為jQuery對象返回。執行效率上還是原生的JavaScript創建效率高 - 創建文本:DOM中的
createTextNode()
方法可以創建文本節點,jQuery中直接將文本字符串添加到元素標記字符串中即可,然后使用append()
等方法將它們添加到DOM文檔樹中。執行效率上還是原生的JavaScript創建效率高 - 創建屬性:DOM中使用
setAttribute(name,value)
方法可以創建屬性節點,并設置屬性節點包含的值。如果元素中存在指定的屬性,它的值將被刷新;如果不存在,則setAttribute()
方法將為元素創建該屬性并賦值,jQuery中直接使用即可 - jQuery以一種簡單的方法代替繁瑣的操作,簡化了Web開發的難度和門檻,但是由于jQuery是對JavaScript的封裝,所以執行速度并沒有得到優化,相反卻影響了代碼的執行效率。因此,在可能的情況下,建議混合使用JavaScript和jQuery方法,以提高代碼執行效率
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
// 創建元素
var $div1 = $("<div></div>");
// 創建文本
var $div2 = $("<div>我是新創建的節點</div>");
// 創建屬性
var $div3 = $("<div title='節點'>我是新創建的節點</div>");
$("body").append($div1);
$("body").append($div2);
$("body").append($div3);
})
</script>
<title>創建節點</title>
</head>
<body>
</body>
</html>
2、插入節點
- 內部插入
方法 | 說明 |
---|---|
append() |
向每個匹配的元素內部追加內容 |
appendTo() |
把所有匹配的元素追加到另一個指定的元素集合中。實際上,該方法顛倒了append() 的用法。例如$(A).append(B) 與$(B).appendTo(A) 是等價的 |
prepend() |
向每個匹配的元素內部前置內容 |
prependTo() |
把所有匹配的元素前置到另一個指定的元素集合中。實際上,該方法顛倒了prepend() 的用法。例如$(A).prepend(B) 與$(B).prependTo(A) 是等價的 |
- 外部插入
方法 | 說明 |
---|---|
after() |
在每個匹配的元素之后插入內容 |
before() |
在每個匹配的元素之前插入內容 |
insertAfter() |
把所有匹配的元素插入到另一個指定的元素集合后面 |
insertBefore() |
把所有匹配的元素插入到另一個指定的元素集合前面 |
3、刪除節點
方法 | 說明 |
---|---|
remove() |
從DOM中刪除所有匹配的元素 |
empty() |
清空元素包含的內容,不刪除當前匹配元素 |
detach() |
將匹配的元素從DOM中分離出來 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
// $("button").click(function () {
// $("p").empty();
// })
$("p").click(function () {
$(this).toggleClass("off");
});
var p;
$("button").click(function () {
if (p) {
p.appendTo("body");
p = null;
} else {
p = $("p").detach();
}
});
})
</script>
<title>刪除節點</title>
<style type="text/css">
p {
background: yellow;
margin: 6px 0;
cursor: pointer;
}
p.off {background: white;}
</style>
</head>
<body>
<p>段落文本1</p>
<div>布局文本</div>
<p>段落文本2</p>
<button>清除段落文本</button>
</body>
</html>
4、復制節點
jQuery使用clone()
方法復制節點,用法:clone([withDataAndEvents])
、clone([withDataAndEvents], [deepWithDataAndEvents])
。參數withDataAndEvents
表示一個布爾值,可以是true
也可以是false
,用來設置是否復制事件處理函數等數據,默認是false
。參數deepWithDataAndEvents
也是一個布爾值,用來設置對事件處理函數和復制元素的所有子元素的數據是否應該被復制。默認情況下它的值為相匹配的第一個參數的值(默認值是false)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("b").click(function () {
$(this).toggleClass("off");
});
$("b").clone(true).insertAfter("p");
})
</script>
<title>復制節點</title>
<style type="text/css">
.off{background: yellow;}
</style>
</head>
<body>
<b>加粗文本</b>
<p>段落文本</p>
</body>
</html>
5、替換節點
-
replaceWith()
方法能夠將所有匹配的元素替換成指定的HTML或DOM元素。用法:replaceWith(newContent)
、replaceWith(function)
-
replaceAll()
方法能夠用匹配的元素替換掉所有指定參數匹配到的元素。用法:replaceAll(selector)
- 上述兩種方法實際上是一對相反的操作,
$(A).replaceAll($B)
等價于$B.replaceWith($A)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("button").click(function () {
// $(this).replaceWith("<div>" + $(this).text() + "</div>");
$("<div>" + $(this).text() + "</div>").replaceAll(this);
});
})
</script>
<title>替換節點</title>
<style type="text/css">
button {display: block;margin: 3px; color: red; width: 200px;}
div {color: red; border: solid 2px blue;
width: 200px; margin: 3px; text-align: center;}
</style>
</head>
<body>
<button>按鈕1</button>
<button>按鈕2</button>
<button>按鈕3</button>
</body>
</html>
6、包裹元素
DOM沒有提供包裹元素的方法,jQuery定義了3種包裹元素的方法:wrap()
、wrapAll()
和wrapInner()
- 外包:
wrap()
方法能夠在每個匹配的元素外層包上一個html元素。用法:wrap(wrappingElement)
和wrap(wrappingFunction)
- 內包:
wrapInner()
方法能夠在匹配元素的內容外包裹一層結構。用法:wrapInner(wrappingElement)
和wrapInner(wrappingFunction)
- 總包:
wrapAll()
方法能夠在所有匹配元素外包一層結構 - 卸包:
unwrap()
方法與wrap()
方法的功能相反,能夠將匹配元素的父級元素刪除,保留自身在原來的位置。用法:unwrap()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
// $("a").wrap("<ul><li></li></ul>");
// $("a").wrap("<li></li>");
// $("body").wrapInner("<ul></ul>");
// $("li").wrapAll("<ul></ul>"); // 效果和上邊的等效
var i = 0, $a = $("a");
$("button").click(function () {
if ( i== 0) {
$a.wrap("<li></li>");
i = 1;
} else {
$a.unwrap();
i = 0;
}
})
})
</script>
<title>包裹元素</title>
<style type="text/css">
li {border: solid 1px red; padding: 2px;}
a {background: #FCF;}
/*ul {border: solid 2px blue;}*/
</style>
</head>
<body>
<a href="#">首頁</a>
<a href="#">社區</a>
<a href="#">新聞</a>
<button>包裝/卸包</button>
</body>
</html>
7、操作屬性
jQuery和DOM都提供了屬性的基本操作方法。屬性操作包括設置屬性、訪問屬性、刪除屬性和修改屬性等。
- 設置屬性
-
prop()
能夠為匹配的元素設置一個或更多的屬性。用法:prop(propertyName, value)
、prop(map)
、prop(propertyName, function(index, oldPropertyValue))
-
attr()
也能夠為匹配的元素設置一個或更多的屬性。用法:attr(attributeName, value)
、attr(map)
、attr(attributeName, function(index, attr))
-
attr()
和prop()
方法都可以用來設置元素屬性,但在用法上還是有一些細微差別。一般使用prop()
方法獲取表單屬性值。使用prop()
方法的時候,返回值是標準屬性,如$('#checked').prop('disabled')
,不會返回disabled或者空字符串,只會是true/false。
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("input[checked='checked']").prop({
disabled: true
});
// $("img").attr("src", function () {
// return "../resource/test_image.jpeg";
// });
$("img").attr({"src" : "../resource/test_image.jpeg"});
})
</script>
<title>操作屬性</title>
</head>
<body>
<input type="checkbox" checked="checked">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox" checked="checked">
<img>
</body>
</html>
屬性(Attribute/Property) | attr() | prop() |
---|---|---|
accessKey | ?? | |
align | ?? | |
class | ?? | |
contenteditable | ?? | |
draggable | ?? | |
href | ?? | |
id | ?? | |
label | ?? | |
rel | ?? | |
src | ?? | |
tabindex | ?? | |
title | ?? | |
type | ?? | |
width(if needed over width()) | ?? | |
async | ?? | |
autofocus | ?? | |
checked | ?? | |
loaction(IE window.loaction) | ?? | |
multiple | ?? | |
readOnly | ?? | |
selected | ?? |
- 訪問屬性:當為
prop()
和attr()
方法傳遞兩個參數時一般用來為指定的屬性設置值,而當為這兩個方法傳遞一個參數時,則表示讀取指定屬性的值-
prop()
方法只獲得jQuery對象中第一個匹配元素的屬性值。如果元素的一個屬性沒有設置或者沒有匹配的元素,則該方法將返回undefined值。為了獲得每個單獨的元素的屬性值,可以使用循環結構的jQuery.each()
或map()
方法來逐一讀取 - 根據W3C表單規范,checked屬性是一個布爾屬性,這意味著該屬性值為布爾值,那么如果屬性沒有值,或者為空字符串值,這就為腳本中進行邏輯判斷帶來了麻煩??紤]到不同瀏覽器對其處理結果的不同,可以采取以下方式進行檢測:
if(elem.checked)
if($(elem).prop("checked"))
if($(elem).is(":checked"))
- 使用
attr()
進行檢測,就容易出現問題
-
attr()
方法只獲取jQuery第一個匹配元素的屬性值。如果要獲取每個單獨的元素的屬性值,需要使用jQuery的each()
或者map()
方法做一個循環
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("#check").change(function () {
var $input = $(this);
$("p").html(".attr('checked') = <b>" + $input.attr('checked') + "</b><br>"
+ ".prop('checked') = <b>" + $input.prop('checked') + "</b><br>"
+ ".is(':checked') = <b>" + $input.is(':checked'));
}).change();
$("button").click(function () {
$(this).next().removeAttr("disabled").focus().val("可編輯文本框")
})
})
</script>
<title>訪問屬性</title>
<style type="text/css">
b {color: red;}
</style>
</head>
<body>
<input type="checkbox" id="check" checked="checked">
<label for="check">復選框</label>
<button>激活文本框</button>
<input type="text" disabled="disabled" value="只讀文本框">
<p></p>
</body>
</html>
- 刪除屬性
-
removeProp()
方法主要用來刪除由prop()
方法設置的屬性集 -
removeAttr()
方法使用DOM原生的removeAttribute()
方法,該方法的優點是能夠直接被jQuery對象訪問調用,而且具有良好的瀏覽器兼容性
-
8、操作類
jQuery定義了幾個與類樣式相關的操作方法。
- 添加類樣式:
addClass()
方法為元素追加樣式,用法:addClass(className)
、addClass(function(index, class))
- 刪除類樣式:
removeClass([className])
、removeClass(function(index, class))
- 切換類樣式:演示切換在Web開發中比較常用,如折疊、開關、伸縮及Tab切換等動態效果。jQuery使用
toggleClass()
方法開/關定義類樣式。用法:toggleClass(className)
、toggleClass(className, switch)
、toggleClass(function(incex, class), [switch])
- 判斷類樣式:
hasClass(className)
方法判斷元素是否包含指定的類樣式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("p:last").addClass("selected");
$("p").eq(1).addClass("highlight");
$("p:last").removeClass("selected");
$("input").eq(0).click(function () {
$("p:last").toggleClass("hidden");
alert($("p:last").hasClass("hidden"));
});
})
</script>
<title>添加類樣式</title>
<style type="text/css">
.selected {font-weight: bold;}
.highlight {background: yellow;}
.hidden {display: none;}
</style>
</head>
<body>
<p>床前明月光</p>
<p>疑是地上霜</p>
<p>舉頭望明月</p>
<p>低頭思故鄉</p>
<input type="button" value="切換樣式">
</body>
</html>
9、操作內容
jQuery提供多個方法操作文檔內容,它們把HTML結構視為字符串,并以字符串的形式進行操作
- 讀寫HTML字符串:
html()
方法以字符串的形式讀寫HTML文檔結構。用法:html()
、html(htmlString)
、html(function(index, html))
。當html()
方法不包含參數時,表示以字符串形式讀取指定節點下的多有HTML結構,當該方法包含參數的時候,表示向指定節點下寫入HTML結構字符串,同時會覆蓋該節點原來包含的所有內容。注意:html()
方法實際上是對DOM的innerHTML
屬性包裝,因此不支持XML文檔 - 讀寫文本:
text()
方法讀寫指定元素下包含的文本內容,這些文本內容主要是指文本節點包含的數據。用法:text(textString)
、text(function(index, text))
。當text()
方法不包含參數時,表示以字符串形式讀取指定節點下的所有文本內容。當text()
方法包含參數時,表示向指定節點下寫入文本字符串,同時會覆蓋該節點原來包含的所有文本內容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
// var s = $("div").html();
// $("p").html(s);
var s = $("div").text();
$("p").text(s);
$("input").focus(function () {
if ($(this).val() == "請輸入文本") $(this).val("");
});
$("input").blur(function () {
if ($(this).val() == "") $(this).val("請輸入文本");
});
})
</script>
<title>操作內容</title>
<style type="text/css">
div {border: solid 2px red;}
p {border: solid 1px blue;}
</style>
</head>
<body>
<div>
<h1>標題</h1>
<p>段落文本</p>
</div>
<form action="" method="get">
<input type="text" value="請輸入文本">
</form>
</body>
</html>
- 讀寫值:
val()
方法用來讀寫指定表單對象包含的值。當val()
不包含參數并調用時,表示將讀取表單元素的值,當val()
方法包含參數時,表示向指定表單元素寫入值。用法:val()
、val(value)
、val(function(index, value))
。val()
方法在讀寫單選按鈕、復選框、下拉菜單和列表框的值時,比較實用且操作速度快。對于val()
方法來說,可以傳遞一個參數設置表單的顯示值。由于下拉菜單和列表框,顯示為每個選項的文本,而不是value屬性值,故通過設置選項的顯示值,可以決定應顯示的項目。對于其他表單元素來說,必須制定value值方才有效。如果為元素指定多個值,則可以以數組的形式進行參數傳遞。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("button").eq(0).click(function () {
alert($("#s1").val() + $("#s2").val() + $("input").val() + $(":radio").val());
});
$("button").eq(1).click(function () {
$("#s1").val("單選2");
$("#s2").val(["多選2", "多選3"]);
$("input").val(["6", "8"]);
})
})
</script>
<title>讀寫表單值</title>
</head>
<body>
<form action="" method="get">
<select name="" id="s1">
<option value="1" selected="selected">單選1</option>
<option value="2">單選2</option>
</select>
<select name="" id="s2" size="3" multiple="multiple">
<option value="3" selected="selected">多選1</option>
<option value="4">多選2</option>
<option value="5" selected="selected">多選3</option>
</select>
<input type="checkbox" value="6">復選框1
<input type="checkbox" value="7" checked="checked">復選框2<br/>
<input type="radio" value="8">單選按鈕1
<input type="radio" value="9" checked="checked">單選按鈕2<br/><br/>
<button>顯示各個表單對象的值</button>
<button>設置各個表單對象的值</button>
</form>
</body>
</html>
10、操作樣式表
jQuery把所有與CSS樣式相關的操作都封裝到css()
方法中。
- 讀寫CSS樣式:CSS樣式存在三種形式:行內樣式、文檔內部樣式和文檔外部樣式。行內樣式以元素屬性的形式存在,使用style屬性即可讀寫,而文檔內部樣式和文檔外部樣式統一被視為外部樣式,這些外部樣式只能通過DOM的StyleSheets、CSS和CSS2模塊提供的對象、方法和屬性才能訪問和操作。jQuery使用
css()
方法讀取指定的樣式,也能夠為元素設置CSS樣式。用法:css(propertyName)
、css(propertyName, value)
、css(propertyName, function(index, value))
、css(map)
。參數map表示屬性名值對構成的對象,如:{name:value;}-
css()
方法能夠讀取指定元素的所有CSS樣式,不管它是行內樣式、文檔內部樣式還是文檔外部樣式 -
css()
方法可以傳入一個字符串形式的屬性名。對于多單詞構成的屬性名,jQuery既可以解釋連字符的CSS表示法,如background-color
,也可以解釋駝峰大小寫形式的DOM表示法,如backgroundColor
- 在設置樣式屬性時,
css()
方法能夠接受的參數有兩種:一種是為它傳遞一個單獨的樣式屬性和值;應以重視為它傳遞一個由屬性名值對構成的映射map,用戶可以將這些jQuery映射看成是JavaScript對象直接量。 - 如果屬性值是數字值不需要加引號,而字符串值需要加引號。但是,當使用映射表示法時,如果屬性名使用駝峰大小寫形式的DOM表示法,則可以省略引號。
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("p").html("color=" + $("p").css("color") + "<br/>font-weight=" + $("p").css("font-weight"));
$("p").css("font-style","italic");
$("p").css({color: "blue", fontWeight: "bold"});
$("p").css({textDecoration:"line-through"});
$("p").click(function () {
$(this).css({
"fontSize": function (index, value) {
return parseFloat(value) * 1.2;
}
});
})
})
</script>
<title>讀寫CSS樣式</title>
<style type="text/css">
.red {color: red;}
</style>
</head>
<body>
<p class="red" style="font-weight: bold">段落文本</p>
</body>
</html>
- 絕對定位:在DOM中使用offsetLeft和offsetTop屬性可以獲取元素的最近偏移位置。但是不同的瀏覽器定義元素的偏移參照對象不同。例如:IE總是以父元素為參照對象進行偏移,而非IE瀏覽器會以最近非靜態定位元素為參照對象進行偏移。所有瀏覽器都支持offsetParent屬性,該屬性能夠自動識別當前元素偏移的參照對象。jQuery簡化了定位操作,使用
offset()
方法可以獲取匹配元素在當前視口的相對偏移。用法:offset()
、offset(coordinates)
、offset(function(index, coods))
。參數coordinates表示一個對象,包含top和left屬性,用整數指明元素的新頂部和左邊坐標。- 如果調用
offset()
方法沒有傳遞參數,則將返回一個對象,包含兩個屬性top和left,分別存儲匹配元素的頂部偏移和左側偏移。注意,該方法僅對可見元素有效 -
offset()
方法允許用戶重新設置元素的位置,這個元素的位置是相對于document對象的。如果對象原先的position樣式屬性是static(靜態定位)的話,會被改成relative(相對定位)來實現重定位。
- 如果調用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var o1 = $("div").eq(0).offset(); // 獲取第一個div元素的偏移信息
$("div").eq(0).html("left: " + o1.left + "<br />top: " + o1.top);
var o2 = $("div").eq(1).offset(); // 獲取第二個div元素的偏移信息
$("div").eq(1).html("left: " + o2.left + "<br />top: " + o2.top);
var o3 = $("div").eq(2).offset(); // 獲取第三個div元素的偏移信息
$("div").eq(2).html("left: " + o3.left + "<br />top: " + o3.top);
})
</script>
<title>絕對定位</title>
<style type="text/css">
body { padding: 0; margin: 0;} /*清除頁邊距*/
div {height: 60px; width: 200px; border: 10px solid red;}
</style>
</head>
<body>
<div>盒子1</div>
<div style="float: left">盒子2</div>
<div style="float: left">盒子3</div>
</body>
</html>
- 相對定位:使用JavaScript獲取指定元素的相對便宜位置設計思路:利用offsetParent屬性獲取最近的父級定位元素,然后判斷該元素的位置,如果它是父元素,則可以直接讀取當前元素的offsetLeft和offsetTop屬性值,如果不是父元素,則可以獲取當前元素的絕對偏移位置減去定位元素的絕對偏移位置,即可獲得當前元素距離定位元素的偏移距離。jQuery使用
position()
方法可以獲取匹配元素的相對偏移位置。用法:position()
-
position()
方法的用法與offset()
方法相同,都返回一個包含兩個屬性(top和left)的對象。注意:為精確計算結果,在補白、邊框和填充屬性上使用像素單位,該方法只對可見元素有效 - 獲取匹配元素中第一個元素的當前坐標,相對于offset parent的坐標。offset parent指離鈣元素最近的而且被定位過的祖先元素。
position()
方法獲得該元素相對于offset parent的當前坐標。與offset()
不同,offset()
是獲得鈣元素相對于document的當前坐標,當把一個新元素放在同一個容器里邊另一個元素附近時,用position()
最好 - jQuery還定義了
scrollTop()
和scrollLeft()
兩個方法分別獲取匹配元素相對滾動條頂部和左側的偏移值
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var o1 = $("div").eq(0).position(); // 獲取元素的相對偏移位置
$("div").eq(0).html("left: " + o1.left + "<br />top: " + o1.top); // 顯示相對偏移位置
var o2 = $("div").eq(2).position(); // 獲取第二個div元素的偏移信息
$("div").eq(2).html("left: " + o2.left + "<br />top: " + o2.top);
})
</script>
<title>相對定位</title>
<style type="text/css">
body { padding: 0; margin: 0;} /*清除頁邊距*/
div {height: 60px; width: 200px; border: 10px solid red;}
</style>
</head>
<body>
<div>盒子1</div>
<div style="position: relative; float: right; width: 300px; height: 100px; border-color: blue;">
<div>盒子2</div>
</div>
</body>
</html>
- 控制大?。簀Query使用
width()
和height()
方法讀寫元素的大小。用法:width()
、width(value)
、width(function(index, value))
、height()
、height(value)
、height(function(index, value))
-
width()
和height()
方法在沒有傳遞參數的時候,表示讀取元素的寬度和高度,返回值的單位是像素。也可以傳遞參數設置元素的寬和高,如果直接傳遞一個數值,則默認單位是像素px,也可以以字符串形式傳遞值和單位 - 除了
width()
和height()
方法,jQuery還定義了innerHeight()
、innerWidth()
、outerHeight()
、outerWidth()
方法,這些方法實際上是在width()
和height()
方法基礎上,計算了元素的邊框或補白。其中outerHeight()
、outerWidth()
方法能夠返回元素總寬和總高(包括寬高、補白和邊框寬度),innerHeight()
、innerWidth()
方法能夠返回元素的內容寬度和高度(包括寬高和補白)
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("div").html("innerHeight=" + $("div").innerHeight() + "<br/>innerWidth=" + $("div").innerWidth() + "<br/>outerHeight=" + $("div").outerHeight() + "<br/>outerWidth=" + $("div").outerWidth());
})
</script>
<title>控制大小</title>
<style type="text/css">
div {
width: 200px;
height: 50px;
margin: 50px;
padding: 50px;
border: solid 50px red;}
</style>
</head>
<body>
<div style="border: solid 10px red;">盒子</div>
</body>
</html>
11、遍歷文檔
jQuery使用children()
、next()
、prev()
、parent()
方法遍歷文檔中任何元素。其中children()
方法獲取當前元素包含的所有子元素,next()
方法獲取當前元素相鄰的而下一個同級元素,prev()
方法獲取當前元素相鄰的上一個同級元素,parent()
犯法獲取當前元素的父元素,這些方法返回值都是jQuery對象,而不是DOM集合或對象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../lib/jQuery/jQuery-3.2.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var $body = $("body"); // 獲取body元素
var li = $body.children().eq(2).children()[0]; //利用children()方法,遍歷到第一個li元素
$(li).text("第一句").next().text("第二句").next().text("第三句"); // 利用next()方法,遍歷li元素,并修改每個li元素的文本內容
})
</script>
<title>遍歷文檔</title>
</head>
<body>
<h1>《望岳》</h1>
<p>杜甫</p>
<ul>
<li>岱宗夫如何,齊魯青未了。</li>
<li>造化鐘神秀,陰陽割昏曉。</li>
<li>蕩胸生層云,決眥入歸鳥。</li>
<li>會當凌絕頂,一覽眾山小。</li>
</ul>
</body>
</html>