-
Notifications
You must be signed in to change notification settings - Fork 30
/
jquery-dom.md
336 lines (235 loc) · 10.9 KB
/
jquery-dom.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
DOM 是 Document Object Model 的缩写,译为 **文档对象模型**。根据 W3C DOM 规范,DOM 是一种与浏览器、平台、语言无关的接口,使用该接口可以轻松地访问页面中所有的标准组件。
jQuery 中另一个重要的组成部分就是封装了原生 DOM 的操作。
## 基本操作
### html操作
html() 方法用于读取或设置指定元素的 HTML 代码,类似于原生 DOM 中的 innerHTML 属性。
```javascript
//获取<p>元素的HTML代码
$("input:eq(0)").click(function(){
alert( $("p").html() );
});
//设置<p>元素的HTML代码
$("input:eq(1)").click(function(){
$("p").html("<strong>你最讨厌的水果是?</strong>");
});
```
### 文本操作
text() 方法用于读取或设置指定元素的文本内容,类似于原生 DOM 中的 textContent 属性。
```javascript
//获取<p>元素的文本
$("input:eq(0)").click(function(){
alert( $("p").text() );
});
//设置<p>元素的文本
$("input:eq(1)").click(function(){
$("p").text("你最讨厌的水果是?");
});
```
### 值操作
val() 方法用于读取或设置指定元素的 value 属性值,类似于原生 DOM 中的 value 属性。
```javascript
//获取按钮的value值
$("input:eq(0)").click(function(){
alert( $(this).val() );
});
//设置按钮的value值
$("input:eq(1)").click(function(){
$(this).val("我被点击了!");
});
```
### 属性操作
- attr() 方法用于获取或设置指定元素的属性,类似于原生 DOM 中的 getAttribute() 方法和 setAttribute() 方法。
- removeAttr() 方法用于删除指定元素的属性,类似于原生 DOM 中的 removeAttribute() 方法。
```javascript
//设置<p>元素的属性'title'
$("input:eq(0)").click(function(){
$("p").attr("title","选择你最喜欢的水果.");
});
//获取<p>元素的属性'title'
$("input:eq(1)").click(function(){
alert( $("p").attr("title") );
});
//删除<p>元素的属性'title'
$("input:eq(2)").click(function(){
$("p").removeAttr("title");
});
```
## 样式操作
操作样式主要分成两种:
- 一种是使用style属性直接设置CSS中的属性
- 一种是使用class样式名称设置CSS。
### attr() 方法操作
class 本身就是元素中的一个属性,所以也可以使用设置属性方式来设置或删除 class 样式。
**语法结构:**
```javascript
element.attr("class",className)
```
> **值得注意的是:** 使用 attr() 方法设置 class 样式时,无论之前是否包含 class 属性,之前设置的样式都会被覆盖。
```javascript
//<input type="button" value="采用属性增加样式" id="b1"/>
$("#b1").click(function(){
$("#mover").attr("class","one");
})
```
### addClass() 方法操作
addClass() 方法表示追加样式,也就是说,无论之前是否包含 class 样式,调用 addClass() 方法只是在其基础上增加一个新的样式。而之前设置的样式依旧存在。
```javascript
//<input type="button" value=" addClass" id="b2"/>
$("#b2").click(function(){
$("#mover").addClass("mini");
})
```
### removeClass() 方法操作
removeClass() 方法表示删除样式,但该方法的使用有以下三种方式:
- removeClass(): 默认不传递任何参数,表示删除所有样式。
- removeClass(className): 传递一个样式名称,表示删除指定一个样式。
- removeClass(className1 className2): 传递多个样式名称,中间使用空格隔开,表示删除指定多个样式。
```javascript
//<input type="button" value="removeClass" id="b3"/>
$("#b3").click(function(){
$("#mover").removeClass();
})
```
### toggleClass() 方法操作
toggleClass() 方法表示在没有样式与指定样式之间进行切换,效果相当于使用 addClass() 方法和 removeClass() 方法。
```javascript
//<input type="button" value=" 切换样式" id="b4"/>
$("#b4").click(function(){
// 在没有样式与指定样式之间切换
$("#mover").toggleClass("one");
})
```
### hasClass() 方法操作
hasClass() 方法表示指定元素是否包含指定样式。
> **值得注意的是:** hasClass() 方法并不能判断是否包含样式,而是判断是否包含指定样式。
```javascript
//<input type="button" value=" hasClass" id="b5"/>
$("#b5").click(function(){
// 判断是否含有某个指定样式
alert($("#mover").hasClass("one"));
})
```
### css() 方法操作
css() 方法也可以获取或设置 CSS 样式,但并不是通过 class 属性,而是通过 style 属性直接设置 CSS 中的属性。
#### 获取样式:
css(attrName) 方法,用于获取当前 style 属性的值。
#### 设置样式:
- css(attrName,attrValue) 方法,用于设置当前 style 属性的值。**但每次只能设置一个CSS中的属性。**
- css({attrName:attrValue,attrName:attrValue,…}) 方法,用于设置当前 style 属性的值。**每次可以设置多个CSS中的属性。**
## 遍历节点
### 获取父元素
parent() 方法可以获取指定元素的父元素。
- parent() 方法: 不传递任何参数,是获取指定元素的父元素。
- parent(selector) 方法: 是获取指定元素的符合 selector 选择器的父元素。
```javascript
var $parent = $("li:first").parent(); //第一个<li>元素的父元素
```
### 获取子元素
children() 方法可以获取指定元素的子元素。
- children() 方法: 不传递任何参数,可以获取指定元素的所有子元素。
- children(selector) 方法: 是获取指定元素的符合 selector 选择器的子元素。
```javascript
var $ul = $("ul").children();
alert( $ul.length );//<p>元素下有3个子元素
```
### 获取兄弟元素
**next() 方法是获取指定元素的下一个兄弟元素。**
- next() 方法: 不传递任何参数,是获取指定元素的下一个兄弟元素。
- next(selector) 方法: 是获取指定元素符合 selector 选择器的下一个兄弟元素。
```javascript
var $p1 = $("p").next();
alert( $p1.html() ); // 紧邻<p>元素后的同辈元素
```
**prev() 方法是获取指定元素的上一个兄弟元素。**
- prev()方法: 不传递任何参数,是获取指定元素的上一个兄弟元素。
- prev(selector) 方法: 是获取指定元素符合 selector 选择器的上一个兄弟元素。
```javascript
var $ul = $("ul").prev();
alert( $ul.html() ); // 紧邻<ul>元素前的同辈元素
```
**siblings() 方法是获取指定元素的所有兄弟元素。**
- siblings()方法: 不传递任何参数,是获取指定元素的所有兄弟元素。
- siblings(selector) 方法:是获取指定元素符合 selector 选择器的所有兄弟元素。
```javascript
var $p2 = $("p").siblings();
alert( $p2.html() ); // 紧邻<p>元素的唯一同辈元素
```
### 查找指定后代元素
find(selector) 方法,可以查找指定元素的符合 selector 选择器的后代元素。
```javascript
var eles = $("ul").find("li"); //查找ul元素下的所有li元素
```
## 创建操作
按照原生 DOM 的思路,创建节点需要分别创建元素节点、文本节点和属性节点。
- 元素节点,使用 jQuery 的工厂函数 `$(HTML代码)` 来创建。
- 文本节点,使用 jQuery 的 `text()` 方法进行设置文本,而不需要创建文本节点。
- 属性节点,使用 jQuery 的 `attr()` 方法进行设置属性,而不需要创建属性节点。
其实,使用 jQuery 创建元素,并不需要按照原生 DOM 的思路进行创建。可以一步代码创建完整的元素。
```javascript
//创建一个<li>元素 包括元素节点,文本节点和属性节点
var $li = $("<li title='香蕉'>香蕉</li>");
// 获取<ul>节点 <li>的父节点
var $parent = $("ul");
// 添加到<ul>节点中,使之能在网页中显示
$parent.append($li);
```
## 插入操作
jQuery 中的插入操作分为内部插入和外部插入。
### 内部插入
- append() 方法: 将 append() 后面的元素插入在 append() 前面指定元素的后面。
- prepend() 方法: 将 prepend() 后面的元素插入在 prepend() 前面指定元素的前面。
- appendTo() 方法: 将 appendTo() 前面的元素插入在 appendTo() 后面的元素的后面。
- prependTo() 方法: 将 prependTo() 前面的元素插入在 prependTo() 后面的元素的前面。
```javascript
// append - append后面的节点被添加到append前面的节点的后面
$("#tj").append($("#ms"));
// prepend - prepend后面的节点被添加到prepend前面的节点的前面
$("#tj").prepend($("#ms"));
// appendTo - appendTo前面的节点被添加到appendTo后面的节点的后面
$("#tj").appendTo($("#ms"));
// prependTo - prependTo前面的节点被添加到prependTo后面的节点的前面
$("#tj").prependTo($("#ms"));
```
### 外部插入
- before() 方法: 将 before() 后面的元素插入在 before() 前面的指定元素的前面。
- after() 方法: 将 after() 后面的元素插入在 after() 前面的指定元素的后面。
- insertBefore() 方法: 将 insertBefore() 前面的元素插入在 insertBefore() 后面的指定元素的前面。
- insertAfter() 方法: 将 insertAfter() 前面的元素插入在 insertAfter() 后面的指定元素的后面。
```javascript
// before - before后面的节点被添加到before前面的节点的前面
$("#tj").before($("#ms"));
// after - after后面的节点被添加到after前面的节点的后面
$("#tj").after($("#ms"));
// insertBefore
$("#tj").insertBefore($("#ms"));
// insertAfter
$("#tj").insertAfter($("#ms"));
```
## 删除操作
jQuery 中的删除操作分别为 remove() 方法和 empty() 方法。
- remove() 方法: 删除自身元素及所有后代元素。
- empty() 方法: 删除所有后代元素,但保留自身元素。该方法适合完成清空操作。
```javascript
$("ul li:eq(1)").remove(); // 获取第二个<li>元素节点后,将它从网页中删除
$("ul li").remove("li[title!=菠萝]"); //把<li>元素中属性title不等于"菠萝"的<li>元素删除
$("ul li:eq(1)").empty(); // 获取第二个<li>元素节点后,清空此元素里的内容
```
## 替换操作
jQuery 中的替换操作分别为 replaceWith() 方法和 replaceAll() 方法。
- replaceWith() 方法: 该方法前面的元素是被替换元素。
- replaceAll() 方法: 就是颠倒了的repalceWith( )方法。
```javascript
$("p").replaceWith("<strong>你最不喜欢的水果是?</strong>");
// 同样的实现: $("<strong>你最不喜欢的水果是?</strong>").replaceAll("p");
```
## 复制操作
jQuery 中的复制操作使用的方法为 clone() 方法,该方法与原生 DOM 中的复制节点的方法cloneNode() 在使用时极为相似。
- 原生 DOM 中的 cloneNode(Boolean) 方法,参数 Boolean 表示是否复制后代节点。
- jQuery 中的 clone(Boolean) 方法,参数 Boolean 表示是否复制事件。
```javascript
$("ul li").click(function(){
$(this).clone().appendTo("ul"); // 复制当前点击的节点,并将它追加到<ul>元素
$(this).clone(true).appendTo("ul"); // 注意参数true
//可以复制自己,并且他的副本也有同样功能
})
```