-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
562 lines (470 loc) · 39.6 KB
/
atom.xml
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
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>My blog</title>
<link href="/atom.xml" rel="self"/>
<link href="http://yoursite.com/"/>
<updated>2016-05-31T14:27:57.578Z</updated>
<id>http://yoursite.com/</id>
<author>
<name>jiangBiao</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>JS中对变量和函数声明的提前</title>
<link href="http://yoursite.com/2016/05/31/%E5%8F%98%E9%87%8F%E5%A3%B0%E6%98%8E%E6%8F%90%E5%89%8D/"/>
<id>http://yoursite.com/2016/05/31/变量声明提前/</id>
<published>2016-05-31T13:36:36.000Z</published>
<updated>2016-05-31T14:27:57.578Z</updated>
<content type="html"><h2 id="JS中对变量和函数声明的提前"><a href="#JS中对变量和函数声明的提前" class="headerlink" title="JS中对变量和函数声明的提前"></a>JS中对变量和函数声明的提前</h2><h3 id="一、变量声明“被提前”"><a href="#一、变量声明“被提前”" class="headerlink" title="一、变量声明“被提前”"></a>一、变量声明“被提前”</h3><p> 在JS中,JavaScript解析器会将当前作用域内声明的所有变量和函数都会放到作用域的开始处,但是,只有变量的声明被提前到作用域的开始处了,而赋值操作被保留在原处。<br><a id="more"></a></p>
<p>首先看一段代码,如下: </p>
<pre><code>(function() {
console.log(a);// Uncaught ReferenceError: a is not defined
})();
</code></pre><p>运行上面代码会报错,因为 a 变量根本就没有定义过!</p>
<hr>
<p>再来看看下面的代码:</p>
<pre><code>(function() {
console.log(a); //undefined
var a = &quot;hello world!&quot;;
console.log(a);//hello world!
})();
</code></pre><p>首先,上面这段代码是正确的,没有任何问题。但是,为什么不报错?为什么居然输出的是 undefined?如下:</p>
<pre><code>(function() {
var a;//声明被提前到作用域开始处了!
console.log(a);
a = &quot;hello world!&quot;;//赋值操作还在原地!
console.log(a);
})();
</code></pre><p>这就是为什么上述代码不报异常的原因!变量和函数经过“被提前”之后,a 变量其实就被放在了调用函数的前面,根据 JavaScript 语法的定义,已声明而未被赋值的变量会被自动赋值为 undefined ,所以,第一次打印 a 变量的值就是 undefined,后面我们对 a 变量进行了赋值操作,所以,第二次再打印变量就会输出”hello world!”。</p>
<hr>
<h3 id="二、函数声明“被提前”"><a href="#二、函数声明“被提前”" class="headerlink" title="二、函数声明“被提前”"></a>二、函数声明“被提前”</h3><p>前边说的是变量,接下来我们说说函数。函数的“被提前”还要分两种情况,一种是函数声明,第二种是函数作为值赋值给变量。 </p>
<h4 id="情况一:"><a href="#情况一:" class="headerlink" title="情况一:"></a>情况一:</h4><pre><code>a();//&quot;hello world!&quot;
function a() {
console.log(&quot;hello world!&quot;);
}
</code></pre><p>如上所示,JavaScript 解释器允许你在函数声明之前使用,也就是说,函数声明并不仅仅是函数名“被提前”了,整个函数的定义也“被提前”了!所以上述代码能够正确执行。</p>
<h4 id="情况二:"><a href="#情况二:" class="headerlink" title="情况二:"></a>情况二:</h4><pre><code>a();//这是a
b();//Uncaught TypeError: b is not a function
function a() {
console.log(&quot;这是a&quot;);
}
var b = function () {
console.log(&quot;这是b&quot;);
};
</code></pre><p>我们做了一个对比,a 函数被妥妥的执行了,符合第一种类型;b 变量“被提前”了,但是他的赋值(也就是函数)并没有被提前,从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined ,所以报的错误属于“类型不匹配”,因为 undefined 不是函数,所以不能被调用。</p>
<h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>1.变量的声明被提前到作用域顶部,赋值保留在原地<br>2.函数声明整个“被提前”<br>3.函数作为值赋给变量时只有变量“被提前”了,函数没有“被提前” </p>
<p><strong>作为最佳实践:变量声明一定要放在作用域/函数的最上方!</strong></p>
</content>
<summary type="html">
<h2 id="JS中对变量和函数声明的提前"><a href="#JS中对变量和函数声明的提前" class="headerlink" title="JS中对变量和函数声明的提前"></a>JS中对变量和函数声明的提前</h2><h3 id="一、变量声明“被提前”"><a href="#一、变量声明“被提前”" class="headerlink" title="一、变量声明“被提前”"></a>一、变量声明“被提前”</h3><p> 在JS中,JavaScript解析器会将当前作用域内声明的所有变量和函数都会放到作用域的开始处,但是,只有变量的声明被提前到作用域的开始处了,而赋值操作被保留在原处。<br>
</summary>
<category term="hoist" scheme="http://yoursite.com/tags/hoist/"/>
</entry>
<entry>
<title>利用JSONP解决跨域问题</title>
<link href="http://yoursite.com/2016/05/30/JSONP%E8%AF%A6%E8%A7%A3/"/>
<id>http://yoursite.com/2016/05/30/JSONP详解/</id>
<published>2016-05-30T10:37:18.000Z</published>
<updated>2016-05-30T11:37:47.307Z</updated>
<content type="html"><h2 id="利用JSONP解决跨域问题"><a href="#利用JSONP解决跨域问题" class="headerlink" title="利用JSONP解决跨域问题"></a>利用JSONP解决跨域问题</h2><h4 id="什么是跨域?"><a href="#什么是跨域?" class="headerlink" title="什么是跨域?"></a>什么是跨域?</h4><p>概念:由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。 </p>
<p>例:</p>
<pre><code>URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
</code></pre><a id="more"></a>
<h4 id="解决:通过jsonp跨域"><a href="#解决:通过jsonp跨域" class="headerlink" title="解决:通过jsonp跨域"></a>解决:通过jsonp跨域</h4><p>JSONP 是 JSON 的一种“使用模式;<br>JSONP由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传入回调函数中的JSON数据。 </p>
<p>在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。</p>
<pre><code>例如:有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据, 假设这个json数据地址
是http://example.com/data.php,那么a.html中的代码就可以这样
&lt;script type=&quot;text/javascript&quot;&gt;
function dosomething(jsondata){
//处理获得的json数据
}
&lt;/script&gt;
&lt;script src=&quot;http://example.com/data.php?callback=dosomething&quot;&gt;&lt;/script&gt;
</code></pre><p>js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。</p>
<pre><code>&lt;?php
$callback = $_GET[&apos;callback&apos;];//得到回调函数名
$data = array(&apos;a&apos;,&apos;b&apos;,&apos;c&apos;);//要返回的数据
echo $callback.&apos;(&apos;.json_encode($data).&apos;)&apos;;//输出
?&gt;
</code></pre><p>最终,输出结果为:dosomething([‘a’,’b’,’c’]);</p>
<h4 id="总结:客户端给服务器传送一个函数名,服务器将这函数名与数据拼接成一个大的字符串,再反传给客户端,客户端用eval-执行这个字符串,相当于调用了客户端已有的函数,参数是服务器端返回来的,这种使用JSON的方法就叫JSONP。"><a href="#总结:客户端给服务器传送一个函数名,服务器将这函数名与数据拼接成一个大的字符串,再反传给客户端,客户端用eval-执行这个字符串,相当于调用了客户端已有的函数,参数是服务器端返回来的,这种使用JSON的方法就叫JSONP。" class="headerlink" title="总结:客户端给服务器传送一个函数名,服务器将这函数名与数据拼接成一个大的字符串,再反传给客户端,客户端用eval()执行这个字符串,相当于调用了客户端已有的函数,参数是服务器端返回来的,这种使用JSON的方法就叫JSONP。"></a>总结:客户端给服务器传送一个函数名,服务器将这函数名与数据拼接成一个大的字符串,再反传给客户端,客户端用eval()执行这个字符串,相当于调用了客户端已有的函数,参数是服务器端返回来的,这种使用JSON的方法就叫JSONP。</h4><p>如果你的页面使用jquery,那么通过它封装的方法就能很方便的来进行jsonp操作了</p>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
$.getJSON(&apos;http://example.com/data.php?callback=?&apos;,function(jsondata){
//处理获得的json数据
});
&lt;/script&gt;
</code></pre><p>jquery会自动生成一个全局函数来替换callback=?中的问号,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。</p>
<blockquote>
<p><strong>摘自博客园</strong></p>
</blockquote>
</content>
<summary type="html">
<h2 id="利用JSONP解决跨域问题"><a href="#利用JSONP解决跨域问题" class="headerlink" title="利用JSONP解决跨域问题"></a>利用JSONP解决跨域问题</h2><h4 id="什么是跨域?"><a href="#什么是跨域?" class="headerlink" title="什么是跨域?"></a>什么是跨域?</h4><p>概念:由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。 </p>
<p>例:</p>
<pre><code>URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
</code></pre>
</summary>
<category term="js跨域" scheme="http://yoursite.com/tags/js%E8%B7%A8%E5%9F%9F/"/>
</entry>
<entry>
<title>ajax异步刷新技术</title>
<link href="http://yoursite.com/2016/05/29/ajax%E5%BA%94%E7%94%A8/"/>
<id>http://yoursite.com/2016/05/29/ajax应用/</id>
<published>2016-05-29T11:45:30.000Z</published>
<updated>2016-05-29T15:18:06.302Z</updated>
<content type="html"><h2 id="异步的HTTP“请求-响应”模型——XMLHttpRequest"><a href="#异步的HTTP“请求-响应”模型——XMLHttpRequest" class="headerlink" title="异步的HTTP“请求-响应”模型——XMLHttpRequest"></a>异步的HTTP“请求-响应”模型——XMLHttpRequest</h2><p> 当前页面发起一个异步的请求,为了获取服务器端返回的一小段数据(一般都不是完整的HTML页面),客户端也不会把当前页面内容清除,而是等待着服务器返回数据片段,把这些片段的内容挂载到当前DOM树上。<br> &nbsp;&nbsp;&nbsp;&nbsp;优点:客户端不会出现一片惨白;服务器端返回的数据量小多了。</p>
<h2 id="一、原生js使用AJAX的基本步骤:"><a href="#一、原生js使用AJAX的基本步骤:" class="headerlink" title="一、原生js使用AJAX的基本步骤:"></a>一、原生js使用AJAX的基本步骤:</h2><pre><code>使用AJAX应用的步骤:
(第一步)
创建XMLHttpRequest对象——注意IE的兼容性问题
var xhr = null ;
if( window.XMLHttpRequest ){ //普通浏览器
xhr = new XMLHttpRequest( );
}else{ //老IE浏览器
xhr = new ActiveXObject(&apos;Microsoft.XMLHTTP&apos;);
}
(第二步)
为XHR对象的onreadystatechange句柄绑定监听函数——监听xhr.readyState属性值的改变
xhr.onreadystatechange = function(){
if(xhr.readyState===4){ //接收了所有的响应数据
if(xhr.status===200){
//响应成功,可以处理响应主体数据了...xhr.responseText
}else{
//响应已结束,但并不是成功的响应
}
}
}
(第三步)
使用XHR对象创建一个HTTP请求消息
xhr.open(请求方法, URI, true); //请求方法:get、post;true是异步
(第四步)
使用XHR对象发送请求消息给服务器
xhr.send(null/&apos;k1=v1&amp;k2=v2&apos;);
一、使用AJAX发送GET请求
(1)创建XHR对象
(2)绑定监听函数
(3)创建请求消息
xhr.open(&apos;GET&apos;, &apos;xxx.php?k1=v1&amp;k2=v2&apos;, true);
(4)发送请求消息
xhr.send(null); //HTTP协议规定:GET没有请求主体
二、使用AJAX发送POST请求
(1)创建XHR对象
(2)绑定监听函数
(3)创建请求消息
xhr.open(&apos;POST&apos;, &apos;xxx.php&apos;, true);
(4)发送请求消息——必须设置Content-Type请求头(因为AJAX POST请求默认使用Content-Type: text/plain发送请求主体数据——PHP服务器是无法接收)
xhr.setRequestHeader(&apos;Content-Type&apos;, &apos;application/x-www-form-urlencoded&apos;);
xhr.send(encodeURI(&apos;k1=v1&amp;k2=v2&amp;k3=v3&apos;));//当有中文时需用encodeURI()
</code></pre><a id="more"></a>
<h2 id="二、使用jQuery简化AJAX操作:"><a href="#二、使用jQuery简化AJAX操作:" class="headerlink" title="二、使用jQuery简化AJAX操作:"></a>二、使用jQuery简化AJAX操作:</h2><pre><code>1.使用$(&apos;...&apos;).load(url, [data], [fn])函数//参数可以写成{key:value}
作用:载入远程 HTML 文件代码片段并插入至当前选中的DOM元素中。
此方法最大的限制:(1)服务器返回的数据必须是HTML代码片段!(2)且因为底层使用的是(innerHTML=返回值),原有内容都会被清除掉——灵活性不足。
</code></pre><hr>
<pre><code>2.使用$.ajax( )函数
使用方法:
$.ajax({
type:&apos;GET/POST&apos;,
url: &apos;xxx.php&apos;,
data: &apos;k1=v1&amp;k2=v2&apos;/{k1:v1, k2:v2},
dataType: &apos;text/html/script/xml/json/jsonp&apos;
async: true,
error: function(){ },
success: function(){ }
});
</code></pre><hr>
<pre><code>3.使用$.get()、$.post()、$.getScript()、$.getJSON()方法
$.ajax({
type: &apos;GET&apos;,
url: &apos;...&apos;
data: ...,
success: fn
})
上述方法可以简写为: $.get(&apos;url&apos;, data, fn);//如果没写dataType,会自动获取服务器端的响应头部,
根据类型自动解析
$.ajax({
type: &apos;POST&apos;,
url: &apos;...&apos;
data: ...,
success: fn
})
上述方法可以简写为: $.post(&apos;url&apos;, data, fn)
$.getJSON()是$.ajax({ dataType: &apos;json&apos;})的简写,用于从服务器一段JSON数据,并解析为JS对象。
$.getScript()是$.ajax({ dataType: &apos;script&apos;})的简写,用于从服务器一段JavaScript脚本,并立即调用eval()函数执行返回的脚本。
</code></pre><hr>
<pre><code>4.jQuery对AJAX的支持——表单输入的序列化
var stringData = $(&apos;#xxForm&apos;).serialize( );//主要
var objData = $(&apos;#xxForm&apos;).serializeArray();
表单序列化:把当前选定的表单中所有的输入域的名和值组成一个大的用&amp;符号拼接的字符串,可以直接用于AJAX请求方法。
</code></pre><h2 id="三、Angular-JS里-http:提供异步的AJAX请求服务"><a href="#三、Angular-JS里-http:提供异步的AJAX请求服务" class="headerlink" title="三、Angular JS里$http:提供异步的AJAX请求服务"></a>三、Angular JS里$http:提供异步的AJAX请求服务</h2><pre><code>1.GET请求
.controller(&apos;名称&apos;, function($http){
$http.get(&apos;xx.php?k1=v1&amp;k2=v2&apos;).success(fn)
})
例:$http.get(&apos;data/dish.php?kw=&apos;+$scope.kw)
.success(function(data){
});
2.POST请求——重点且注意(必须设置请求头部,且用jQuery的param()方法解析data)
var data = {k1: v1, k2:v2 };
data = jQuery.param( data );
$http.post(
&apos;xx.php&apos;,
data,
{
headers :{&apos;Content-Type&apos;:&apos;application/x-www-form-urlencoded&apos;}
}
)
.success(fn);
</code></pre></content>
<summary type="html">
<h2 id="异步的HTTP“请求-响应”模型——XMLHttpRequest"><a href="#异步的HTTP“请求-响应”模型——XMLHttpRequest" class="headerlink" title="异步的HTTP“请求-响应”模型——XMLHttpRequest"></a>异步的HTTP“请求-响应”模型——XMLHttpRequest</h2><p> 当前页面发起一个异步的请求,为了获取服务器端返回的一小段数据(一般都不是完整的HTML页面),客户端也不会把当前页面内容清除,而是等待着服务器返回数据片段,把这些片段的内容挂载到当前DOM树上。<br> &nbsp;&nbsp;&nbsp;&nbsp;优点:客户端不会出现一片惨白;服务器端返回的数据量小多了。</p>
<h2 id="一、原生js使用AJAX的基本步骤:"><a href="#一、原生js使用AJAX的基本步骤:" class="headerlink" title="一、原生js使用AJAX的基本步骤:"></a>一、原生js使用AJAX的基本步骤:</h2><pre><code>使用AJAX应用的步骤:
(第一步)
创建XMLHttpRequest对象——注意IE的兼容性问题
var xhr = null ;
if( window.XMLHttpRequest ){ //普通浏览器
xhr = new XMLHttpRequest( );
}else{ //老IE浏览器
xhr = new ActiveXObject(&apos;Microsoft.XMLHTTP&apos;);
}
(第二步)
为XHR对象的onreadystatechange句柄绑定监听函数——监听xhr.readyState属性值的改变
xhr.onreadystatechange = function(){
if(xhr.readyState===4){ //接收了所有的响应数据
if(xhr.status===200){
//响应成功,可以处理响应主体数据了...xhr.responseText
}else{
//响应已结束,但并不是成功的响应
}
}
}
(第三步)
使用XHR对象创建一个HTTP请求消息
xhr.open(请求方法, URI, true); //请求方法:get、post;true是异步
(第四步)
使用XHR对象发送请求消息给服务器
xhr.send(null/&apos;k1=v1&amp;k2=v2&apos;);
一、使用AJAX发送GET请求
(1)创建XHR对象
(2)绑定监听函数
(3)创建请求消息
xhr.open(&apos;GET&apos;, &apos;xxx.php?k1=v1&amp;k2=v2&apos;, true);
(4)发送请求消息
xhr.send(null); //HTTP协议规定:GET没有请求主体
二、使用AJAX发送POST请求
(1)创建XHR对象
(2)绑定监听函数
(3)创建请求消息
xhr.open(&apos;POST&apos;, &apos;xxx.php&apos;, true);
(4)发送请求消息——必须设置Content-Type请求头(因为AJAX POST请求默认使用Content-Type: text/plain发送请求主体数据——PHP服务器是无法接收)
xhr.setRequestHeader(&apos;Content-Type&apos;, &apos;application/x-www-form-urlencoded&apos;);
xhr.send(encodeURI(&apos;k1=v1&amp;k2=v2&amp;k3=v3&apos;));//当有中文时需用encodeURI()
</code></pre>
</summary>
<category term="ajax" scheme="http://yoursite.com/tags/ajax/"/>
</entry>
<entry>
<title>jQuery中on()方法</title>
<link href="http://yoursite.com/2016/05/29/on%E6%96%B9%E6%B3%95/"/>
<id>http://yoursite.com/2016/05/29/on方法/</id>
<published>2016-05-29T10:36:53.000Z</published>
<updated>2016-05-29T11:39:12.359Z</updated>
<content type="html"><h2 id="jQuery-on-方法使用详解"><a href="#jQuery-on-方法使用详解" class="headerlink" title="jQuery on()方法使用详解"></a>jQuery on()方法使用详解</h2><h3 id="jQuery-on-方法是官方推荐的绑定事件的一个方法"><a href="#jQuery-on-方法是官方推荐的绑定事件的一个方法" class="headerlink" title="jQuery on()方法是官方推荐的绑定事件的一个方法"></a>jQuery on()方法是官方推荐的绑定事件的一个方法</h3><h4 id="selector-on-event-childSelector-data-function-map"><a href="#selector-on-event-childSelector-data-function-map" class="headerlink" title="$(selector).on(event,childSelector,data,function,map)"></a>$(selector).on(event,childSelector,data,function,map)</h4><pre><code>与此相似的有bind() 、live() 、delegate() ,以上三种方法在jQuery1.8之后都不推荐使用,
官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法;
on()则是整合了之前的三种方式的新事件绑定机制。
</code></pre><a id="more"></a>
<h2 id="on方法的优势:"><a href="#on方法的优势:" class="headerlink" title="on方法的优势:"></a>on方法的优势:</h2><h3 id="一、多个事件绑定同一个函数"><a href="#一、多个事件绑定同一个函数" class="headerlink" title="一、多个事件绑定同一个函数"></a>一、多个事件绑定同一个函数</h3><pre><code>$(document).ready(function(){
$(&quot;p&quot;).on(&quot;mouseover click&quot;,function(){
$(this).show();
});
});
</code></pre><h3 id="二、多个事件绑定不同函数"><a href="#二、多个事件绑定不同函数" class="headerlink" title="二、多个事件绑定不同函数"></a>二、多个事件绑定不同函数</h3><pre><code>$(document).ready(function(){
$(&quot;div&quot;).on({
mouseover:function(){$(&quot;body&quot;).css(&quot;background-color&quot;,&quot;red&quot;);},
click:function(){$(&quot;body&quot;).css(&quot;background-color&quot;,&quot;blue&quot;);},
mouseout:function(){$(&quot;body&quot;).css(&quot;background-color&quot;,&quot;yellow&quot;);}
});
});
</code></pre><h3 id="三、事件监听的委托——这是重点"><a href="#三、事件监听的委托——这是重点" class="headerlink" title="三、事件监听的委托——这是重点"></a>三、事件监听的委托——这是重点</h3><pre><code>事件监听的委托,利用的是事件冒泡原理,监听点击事件
可以节约性能,使用on函数有一个优点当就是动态添加新的项目进来的时候也会绑定事件
$(document).ready(function(){
var current = null;
$(&apos;ul&apos;).on(&apos;click&apos;,&apos;li&apos;,
function (){
$(this).css(&quot;background-color&quot;,&quot;blue&quot;); //此时this指代当前点击的li
current = this;
}
);
});
</code></pre></content>
<summary type="html">
<h2 id="jQuery-on-方法使用详解"><a href="#jQuery-on-方法使用详解" class="headerlink" title="jQuery on()方法使用详解"></a>jQuery on()方法使用详解</h2><h3 id="jQuery-on-方法是官方推荐的绑定事件的一个方法"><a href="#jQuery-on-方法是官方推荐的绑定事件的一个方法" class="headerlink" title="jQuery on()方法是官方推荐的绑定事件的一个方法"></a>jQuery on()方法是官方推荐的绑定事件的一个方法</h3><h4 id="selector-on-event-childSelector-data-function-map"><a href="#selector-on-event-childSelector-data-function-map" class="headerlink" title="$(selector).on(event,childSelector,data,function,map)"></a>$(selector).on(event,childSelector,data,function,map)</h4><pre><code>与此相似的有bind() 、live() 、delegate() ,以上三种方法在jQuery1.8之后都不推荐使用,
官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法;
on()则是整合了之前的三种方式的新事件绑定机制。
</code></pre>
</summary>
<category term="on()方法" scheme="http://yoursite.com/tags/on-%E6%96%B9%E6%B3%95/"/>
</entry>
<entry>
<title>jQuery选择器</title>
<link href="http://yoursite.com/2016/04/24/jQuery%E9%80%89%E6%8B%A9%E5%99%A8/"/>
<id>http://yoursite.com/2016/04/24/jQuery选择器/</id>
<published>2016-04-24T13:04:16.000Z</published>
<updated>2016-04-24T14:10:17.965Z</updated>
<content type="html"><h2 id="jQuery的选择器"><a href="#jQuery的选择器" class="headerlink" title="jQuery的选择器"></a>jQuery的选择器</h2><h3 id="基本内容"><a href="#基本内容" class="headerlink" title="基本内容"></a>基本内容</h3><p><strong>注:jQuery中的选择器源于CSS中的选择器,并进行扩展,jQuery中的选择器是jQuery的根基</strong></p>
<h4 id="选择器分类"><a href="#选择器分类" class="headerlink" title="选择器分类"></a>选择器分类</h4><pre><code>一、 基本选择器
* ID选择器 #id值
* 元素选择器 element
* class选择器 .className
* 通配符选择器 * (匹配当前HTML页面的所有元素)
* 组合选择器 seletor1,selector2,...
二、层级选择器
* 祖先 空格 后代
* 父元素 &gt; 子元素
* 目标元素 + 下一个兄弟元素
* 目标元素 ~ 后面所有兄弟元素
</code></pre><a id="more"></a>
<pre><code>三、过滤选择器 (注:在所有的过滤选择器前,需要增加&quot;:&quot;)
1、 基本过滤选择器
* :first - 匹配第一个
* first()函数
* :last - 匹配最后一个
* last()函数
* :not() - 匹配指定规则之外
* :even - 匹配偶数 从0开始
* :odd - 匹配奇数
* :eq() - 索引值等于
* 索引值从 0 开始
* :gt() - 索引值大于
* :lt() - 索引值小于
* :header - 匹配h1h2h3h4h5h6标题
* :animated - 匹配动画(只能匹配jQuery实现的动画效果)
2、子元素过滤选择器
* :nth-child() (注:从1开始)
* :first-child
* :last-child
* :only-child - 只有一个子元素
3、 可见性过滤选择器
* :hidden - 匹配隐藏元素
* :visible - 匹配可见元素
4、 属性过滤选择器
* [attrName]
* [attrName=value]
* [attrName!=value]
* [attrName^=value]
* [attrName$=value]
* [attrName*=value]
* [][][](组合)
5、内容过滤选择器
* :contains(text) - 含有指定文本的元素
* :empty - 不包含子元素或文本元素的元素
* :parent - 包含子元素或文本元素的元素
* :has(selector) - 包含匹配selector的父元素
6、表单对象属性过滤选择器
* :enabled
* :disabled
* :checked
* :selected
7、表单选择器
</code></pre></content>
<summary type="html">
<h2 id="jQuery的选择器"><a href="#jQuery的选择器" class="headerlink" title="jQuery的选择器"></a>jQuery的选择器</h2><h3 id="基本内容"><a href="#基本内容" class="headerlink" title="基本内容"></a>基本内容</h3><p><strong>注:jQuery中的选择器源于CSS中的选择器,并进行扩展,jQuery中的选择器是jQuery的根基</strong></p>
<h4 id="选择器分类"><a href="#选择器分类" class="headerlink" title="选择器分类"></a>选择器分类</h4><pre><code>一、 基本选择器
* ID选择器 #id值
* 元素选择器 element
* class选择器 .className
* 通配符选择器 * (匹配当前HTML页面的所有元素)
* 组合选择器 seletor1,selector2,...
二、层级选择器
* 祖先 空格 后代
* 父元素 &gt; 子元素
* 目标元素 + 下一个兄弟元素
* 目标元素 ~ 后面所有兄弟元素
</code></pre>
</summary>
<category term="jQuery选择器" scheme="http://yoursite.com/tags/jQuery%E9%80%89%E6%8B%A9%E5%99%A8/"/>
</entry>
<entry>
<title>jQuery中的隐式迭代--each()用法</title>
<link href="http://yoursite.com/2016/04/24/each/"/>
<id>http://yoursite.com/2016/04/24/each/</id>
<published>2016-04-24T03:30:04.000Z</published>
<updated>2016-04-24T14:10:31.132Z</updated>
<content type="html"><h3 id="隐式迭代-只关注迭代的开始和结束-不关注迭代过程"><a href="#隐式迭代-只关注迭代的开始和结束-不关注迭代过程" class="headerlink" title="隐式迭代 - 只关注迭代的开始和结束,不关注迭代过程"></a>隐式迭代 - 只关注迭代的开始和结束,不关注迭代过程</h3><h4 id="方法"><a href="#方法" class="headerlink" title="方法"></a>方法</h4><ul>
<li>$(selector).each(callback) (jQuery)对象方法</li>
<li>$.each(obj,callback) (jQuery)全局函数<ul>
<li>callback 回调函数,function(index,domEle){}</li>
<li>index 遍历过程中的索引值</li>
<li>domEle 遍历得到的每个DOM对象(元素)</li>
<li>obj 需要遍历的对象或数组<a id="more"></a>
</li>
</ul>
</li>
</ul>
<h4 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h4><pre><code>$(&quot;ul&gt;li&quot;).each(function(index,domEle){
if(index%2==0){
domEle.style.backgroundColor=&quot;skyblue&quot;;
}
})
将li中索引值为偶数的颜色变为天蓝(偶数从0开始)
</code></pre></content>
<summary type="html">
<h3 id="隐式迭代-只关注迭代的开始和结束-不关注迭代过程"><a href="#隐式迭代-只关注迭代的开始和结束-不关注迭代过程" class="headerlink" title="隐式迭代 - 只关注迭代的开始和结束,不关注迭代过程"></a>隐式迭代 - 只关注迭代的开始和结束,不关注迭代过程</h3><h4 id="方法"><a href="#方法" class="headerlink" title="方法"></a>方法</h4><ul>
<li>$(selector).each(callback) (jQuery)对象方法</li>
<li>$.each(obj,callback) (jQuery)全局函数<ul>
<li>callback 回调函数,function(index,domEle){}</li>
<li>index 遍历过程中的索引值</li>
<li>domEle 遍历得到的每个DOM对象(元素)</li>
<li>obj 需要遍历的对象或数组
</summary>
<category term="each()" scheme="http://yoursite.com/tags/each/"/>
</entry>
<entry>
<title>ready()与onload的区别</title>
<link href="http://yoursite.com/2016/04/15/ready/"/>
<id>http://yoursite.com/2016/04/15/ready/</id>
<published>2016-04-15T14:12:38.586Z</published>
<updated>2016-05-30T10:46:38.806Z</updated>
<content type="html"><h3 id="1-onload没有简写形式-ready具有简写形式,简写形式如下"><a href="#1-onload没有简写形式-ready具有简写形式,简写形式如下" class="headerlink" title="1.onload没有简写形式,ready具有简写形式,简写形式如下:"></a>1.onload没有简写形式,ready具有简写形式,简写形式如下:</h3><pre><code>$(document).ready(function(){})
$().ready(function(){})
$(function(){})
</code></pre><h3 id="2-nbsp-onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行"><a href="#2-nbsp-onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行" class="headerlink" title="2.&nbsp;onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行"></a>2.&nbsp;onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行</h3><a id="more"></a>
<h3 id="3-nbsp-一个HTML页面只能编写一个onload;但是一个HTML页面允许编写多个ready"><a href="#3-nbsp-一个HTML页面只能编写一个onload;但是一个HTML页面允许编写多个ready" class="headerlink" title="3.&nbsp;一个HTML页面只能编写一个onload;但是一个HTML页面允许编写多个ready"></a>3.&nbsp;一个HTML页面只能编写一个onload;但是一个HTML页面允许编写多个ready</h3></content>
<summary type="html">
<h3 id="1-onload没有简写形式-ready具有简写形式,简写形式如下"><a href="#1-onload没有简写形式-ready具有简写形式,简写形式如下" class="headerlink" title="1.onload没有简写形式,ready具有简写形式,简写形式如下:"></a>1.onload没有简写形式,ready具有简写形式,简写形式如下:</h3><pre><code>$(document).ready(function(){})
$().ready(function(){})
$(function(){})
</code></pre><h3 id="2-nbsp-onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行"><a href="#2-nbsp-onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行" class="headerlink" title="2.&nbsp;onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行"></a>2.&nbsp;onload必须等待HTML页面中所有内部都加载完毕后才执行;ready是等待DOM节点树的内容加载完毕后就执行</h3>
</summary>
<category term="read()" scheme="http://yoursite.com/tags/read/"/>
</entry>
</feed>