<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>前端技术 &#8211; 个人随笔</title>
	<atom:link href="/classify/%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sun, 20 May 2018 01:24:07 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>前端技术 &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Jquery（一）选择器、操作类、直接样式操作、偏移、操作 HTML 和文本、值操作、Each 循环、复选框选择</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3458.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3458.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 09:51:01 +0000</pubDate>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[前端框架]]></category>
		<category><![CDATA[Each 循环]]></category>
		<category><![CDATA[值操作]]></category>
		<category><![CDATA[偏移]]></category>
		<category><![CDATA[复选框选择]]></category>
		<category><![CDATA[操作 HTML 和文本]]></category>
		<category><![CDATA[操作类]]></category>
		<category><![CDATA[直接样式操作]]></category>
		<category><![CDATA[选择器]]></category>
		<guid isPermaLink="false">/?p=3458</guid>

					<description><![CDATA[JQuery第一讲 jQuery简介 jQuery是一个开源的，JavaScript脚本库。 jQuery体系 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>JQuery第一讲</h1>
<h2>jQuery简介</h2>
<p>
  jQuery是一个开源的，JavaScript脚本库。
</p>
<h2>jQuery体系</h2>
<p><img fetchpriority="high" decoding="async" width="1000" height="206" src="/wp-content/uploads/2018/05/word-image-3059.png" class="wp-image-3460" srcset="/wp-content/uploads/2018/05/word-image-3059.png 1000w, /wp-content/uploads/2018/05/word-image-3059-300x62.png 300w, /wp-content/uploads/2018/05/word-image-3059-768x158.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h2>部署jQuery开发环境</h2>
<ol>
<li>
  去网站下载jquery代码
</li>
</ol>
<p><img decoding="async" width="871" height="37" src="/wp-content/uploads/2018/05/word-image-3060.png" class="wp-image-3461" srcset="/wp-content/uploads/2018/05/word-image-3060.png 871w, /wp-content/uploads/2018/05/word-image-3060-300x13.png 300w, /wp-content/uploads/2018/05/word-image-3060-768x33.png 768w" sizes="(max-width: 871px) 100vw, 871px" /></p>
<p>
  脚下留心：从官方网站同一个版本可以下载2个文件，一个是源文件，一个是压缩文件，我们开发的时候使用压缩文件。
</p>
<ol>
<li>
  在页面引入jQuery文件
</li>
</ol>
<p><img decoding="async" width="962" height="95" src="/wp-content/uploads/2018/05/word-image-3061.png" class="wp-image-3462" srcset="/wp-content/uploads/2018/05/word-image-3061.png 962w, /wp-content/uploads/2018/05/word-image-3061-300x30.png 300w, /wp-content/uploads/2018/05/word-image-3061-768x76.png 768w" sizes="(max-width: 962px) 100vw, 962px" /></p>
<h2>jQuery选择器</h2>
<p>
  jQuery中，所有的操作都要转成jQuery对象进行操作。通过$()将元素转成JQuery对象。
</p>
<p>
  $()=jQuery()
</p>
<h3>基本选择器</h3>
<p>
  id选择器、class选择器、标签选择器、组合选择器、后代选择器，子类选择器
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  .rose{
</p>
<p>
  	background-color:#11e4e1;
</p>
<p>
  }
</p>
<p>
  .indianred{
</p>
<p>
  	background-color:#cd5d5c;
</p>
<p>
  }
</p>
<p>
  .red{
</p>
<p>
  	color:#F00;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;!—引入jQuery文件&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8217;js/jquery-1.11.3.min.js&#8217;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  //但页面加载完成时
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//当按钮点击的时候
</p>
<p>
  	$(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).addClass(&#8216;indianred&#8217;);		//id选择器
</p>
<p>
  		//$(&#8216;.second&#8217;).addClass(&#8216;indianred&#8217;);		//class样式
</p>
<p>
  		//$(&#8216;th&#8217;).addClass(&#8216;indianred&#8217;);			//标签选择器
</p>
<p>
  		//$(&#8216;#first,.second&#8217;).addClass(&#8216;rose&#8217;);		//组合选择器
</p>
<p>
  		//$(&#8216;.second td&#8217;).addClass(&#8216;red&#8217;);			//后代选择器
</p>
<p>
  		//$(&#8216;.second&gt;td&#8217;).addClass(&#8216;red&#8217;);			//后代选择器
</p>
<p>
  		//$(&#8216;#first+.second&#8217;).addClass(&#8216;indianred&#8217;);	//紧挨着#first的.second
</p>
<p>
  		$(&#8216;#first~.second&#8217;).addClass(&#8216;indianred&#8217;);	//#first后所有的.second
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;table border=&#8217;1&#8242; bordercolor=&#8217;#000&#8242; align=&#8217;center&#8217; width=&#8217;500&#8242;&gt;
</p>
<p>
  	&lt;tr&gt;
</p>
<p>
  		&lt;th&gt;姓名&lt;/th&gt;
</p>
<p>
  		&lt;th&gt;性别&lt;/th&gt;
</p>
<p>
  		&lt;th&gt;年龄&lt;/th&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr id=&#8217;first&#8217;&gt;
</p>
<p>
  		&lt;td&gt;张三&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;男&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;22&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr class=&#8217;second&#8217;&gt;
</p>
<p>
  		&lt;td&gt;李四&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;男&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;33&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr class=&#8217;second&#8217;&gt;
</p>
<p>
  		&lt;td&gt;王五&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;女&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;20&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
      &lt;tr  class=&#8217;second&#8217;&gt;
</p>
<p>
  		&lt;th colspan=&#8221;3&#8243;&gt;&lt;table width=&#8221;100%&#8221; border=&#8221;1&#8243;&gt;
</p>
<p>
  		  &lt;tr&gt;
</p>
<p>
  		    &lt;td&gt;aa&lt;/td&gt;
</p>
<p>
  		    &lt;td&gt;bb&lt;/td&gt;
</p>
<p>
  		    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
</p>
<p>
  	      &lt;/tr&gt;
</p>
<p>
  	    &lt;/table&gt;&lt;/th&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  &lt;/table&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221;&gt;
</p>
<h3>过滤选择器</h3>
<ol>
<li>
  位置过滤</p>
<ol>
<li>
    :first——第一个元素
  </li>
<li>
    :last——最后一个元素
  </li>
<li>
    :even——第偶数个元素（下标从0开始）
  </li>
<li>
    :odd——第奇数个元素
  </li>
<li>
    :eq(index)——第index元素
  </li>
<li>
    :gt(index)——大于第index的元素
  </li>
<li>
    :lt(index)——小于第index的元素
  </li>
</ol>
</li>
</ol>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  .rose{
</p>
<p>
  	background-color:#11e4e1;
</p>
<p>
  }
</p>
<p>
  .indianred{
</p>
<p>
  	background-color:#cd5d5c;
</p>
<p>
  }
</p>
<p>
  .red{
</p>
<p>
  	color:#F00;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.11.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;tr:first&#8217;).addClass(&#8216;indianred&#8217;);			//第一个tr
</p>
<p>
  		//$(&#8216;tr:last&#8217;).addClass(&#8216;indianred&#8217;);			//最后一个tr
</p>
<p>
  		//$(&#8216;tr:even&#8217;).addClass(&#8220;indianred&#8221;);			//第偶数个元素（下标从0开始)
</p>
<p>
  		//$(&#8216;tr:odd&#8217;).addClass(&#8220;indianred&#8221;);			//第奇数个元素
</p>
<p>
  		//$(&#8216;tr:eq(2)&#8217;).addClass(&#8216;indianred&#8217;);			//第2个元素
</p>
<p>
  		$(&#8216;tr:gt(1)&#8217;).addClass(&#8216;indianred&#8217;);			//大于1的元素
</p>
<p>
  		$(&#8216;tr:lt(1)&#8217;).addClass(&#8216;rose&#8217;);					//小于1的元素
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;table border=&#8217;1&#8242; bordercolor=&#8217;#000&#8242; align=&#8217;center&#8217; width=&#8217;500&#8242;&gt;
</p>
<p>
  	&lt;tr&gt;
</p>
<p>
  		&lt;th&gt;姓名&lt;/th&gt;
</p>
<p>
  		&lt;th&gt;性别&lt;/th&gt;
</p>
<p>
  		&lt;th&gt;年龄&lt;/th&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr id=&#8217;first&#8217;&gt;
</p>
<p>
  		&lt;td&gt;张三&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;男&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;22&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr class=&#8217;second&#8217;&gt;
</p>
<p>
  		&lt;td&gt;李四&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;男&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;33&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  	&lt;tr class=&#8217;second&#8217;&gt;
</p>
<p>
  		&lt;td&gt;王五&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;女&lt;/td&gt;
</p>
<p>
  		&lt;td&gt;20&lt;/td&gt;
</p>
<p>
  	&lt;/tr&gt;
</p>
<p>
  &lt;/table&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221;&gt;
</p>
<ol>
<li>
  内容过滤</p>
<ol>
<li>
    :contains(‘内容’)，包含指定内容的元素
  </li>
<li>
    :has()   包含某个子元素
  </li>
<li>
    : not()		去除某个元素
  </li>
<li>
    :header		匹配所有标题h1~h6
  </li>
<li>
    :empty		匹配所有空元素
  </li>
<li>
    :parent		匹配父节点
  </li>
</ol>
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;div:contains(&#8220;锄禾&#8221;)&#8217;).addClass(&#8216;indianred&#8217;);		//包含&#8221;锄禾&#8221;的div
</p>
<p>
  		//$(&#8216;div:has(p)&#8217;).addClass(&#8216;indianred&#8217;);				//含有p标记的div
</p>
<p>
  		//$(&#8216;div:has(#first)&#8217;).addClass(&#8216;indianred&#8217;);				//含有#first的div
</p>
<p>
  		//$(&#8216;div:not(.no1)&#8217;).addClass(&#8216;indianred&#8217;);				//去除掉.no1的div
</p>
<p>
  		//$(&#8216;:header&#8217;).addClass(&#8216;indianred&#8217;);						//选中所有的h1~h6
</p>
<p>
  		//$(&#8216;:empty&#8217;).addClass(&#8217;empty&#8217;);							//匹配所有空元素
</p>
<p>
  		$(&#8216;#first:parent&#8217;).addClass(&#8217;empty&#8217;);					//匹配#first的父节点
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div class=&#8221;first no1&#8243;&gt;&lt;p&gt;锄禾日当午&lt;/p&gt;&lt;/div&gt;
</p>
<p>
  &lt;div class=&#8221;first&#8221;&gt;&lt;p id=&#8221;first&#8221;&gt;汗滴禾下土&lt;/p&gt;&lt;/div&gt;
</p>
<p>
  &lt;h1&gt;一级标题&lt;/h1&gt;
</p>
<p>
  &lt;h2&gt;二级标题&lt;/h2&gt;
</p>
<p>
  &lt;div&gt;&lt;/div&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221; /&gt;
</p>
<ol>
<li>
  子元素过滤选择器</p>
<ol>
<li>
    :first-child——父元素的第一个子元素
  </li>
<li>
    :last-child——父元素的最后一个子元素
  </li>
<li>
    :only-child——父元素只有一个元素的节点
  </li>
<li>
    :nth-child(编号,even,odd)——父元素下的指定编号，偶数，奇数的子元素
  </li>
</ol>
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;li:first-child&#8217;).addClass(&#8216;indianred&#8217;);		//li父元素的第一个子元素
</p>
<p>
  		//$(&#8216;li:last-child&#8217;).addClass(&#8216;indianred&#8217;);			//li父元素的最后一子元素
</p>
<p>
  		//$(&#8216;li:only-child&#8217;).addClass(&#8216;indianred&#8217;);			//li父元素只有一个元素的节点
</p>
<p>
  		//$(&#8216;li:nth-child(2)&#8217;).addClass(&#8216;indianred&#8217;);			//li父元素下第2个子元素，从1开始
</p>
<p>
  		//$(&#8216;li:nth-child(even)&#8217;).addClass(&#8216;indianred&#8217;);		//li父元素下第偶数个子元素
</p>
<p>
  		$(&#8216;li:nth-child(odd)&#8217;).addClass(&#8216;indianred&#8217;);		//li父元素下第奇数个子元素
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li&gt;三国演义&lt;/li&gt;
</p>
<p>
      &lt;li&gt;水浒传&lt;/li&gt;
</p>
<p>
      &lt;li&gt;西游记&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li&gt;钢铁侠&lt;/li&gt;
</p>
<p>
      &lt;li&gt;超人&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li&gt;大棒子&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221; /&gt;
</p>
<ol>
<li>
  表单过滤选择器</p>
<ol>
<li>
    :input——匹配input, select, textarea，button标签
  </li>
<li>
    :text——匹配文本框
  </li>
<li>
    :password——匹配密码框
  </li>
<li>
    :enabled——可以的元素
  </li>
<li>
    :radio——单选按钮
  </li>
<li>
    :checkbox——复选框
  </li>
<li>
    :checked——选中的元素
  </li>
</ol>
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;:input&#8217;).addClass(&#8216;indianred&#8217;);		//表示input,select,textarea，button标签
</p>
<p>
  		//$(&#8216;:text&#8217;).addClass(&#8216;indianred&#8217;);			//文本框
</p>
<p>
  		//$(&#8216;:password&#8217;).addClass(&#8216;indianred&#8217;);		//密码框
</p>
<p>
  		//$(&#8216;:enabled&#8217;).addClass(&#8216;indianred&#8217;);		//可用的元素
</p>
<p>
  		//$(&#8216;:radio,:checkbox&#8217;).addClass(&#8216;style1&#8217;);	//单选按钮和复选框
</p>
<p>
  		$(&#8216;:checked&#8217;).addClass(&#8216;style1&#8217;);		//选中的元素
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  姓名：&lt;input type=&#8221;text&#8221; disabled=&#8221;disabled&#8221;/&gt;&lt;br /&gt;
</p>
<p>
  密码：&lt;input type=&#8221;password&#8221; /&gt;&lt;br /&gt;
</p>
<p>
  性别：&lt;input type=&#8221;radio&#8221; name=&#8221;sex&#8221; value=&#8221;男&#8221; checked=&#8221;checked&#8221; /&gt;男
</p>
<p>
  	&lt;input type=&#8221;radio&#8221; name=&#8221;sex&#8221; value=&#8221;女&#8221; /&gt;女&lt;br /&gt;
</p>
<p>
  爱好：&lt;input type=&#8221;checkbox&#8221; value=&#8221;爬山&#8221; checked=&#8221;checked&#8221; /&gt;爬山
</p>
<p>
  	&lt;input type=&#8221;checkbox&#8221; value=&#8221;游泳&#8221; /&gt;游泳 &lt;br /&gt;
</p>
<p>
  籍贯：&lt;select&gt;
</p>
<p>
  		&lt;option&gt;上海&lt;/option&gt;
</p>
<p>
          &lt;option&gt;北京&lt;/option&gt;
</p>
<p>
  &lt;/select&gt;&lt;br /&gt;
</p>
<p>
  意见和建议：&lt;textarea&gt;&lt;/textarea&gt; &lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;submit&#8221; value=&#8221;提交&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;reset&#8221; value=&#8221;重置&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221; /&gt;
</p>
<p>
  &lt;button&gt;这也是按钮&lt;/button&gt;
</p>
<ol>
<li>
  属性过滤选择器</p>
<ol>
<li>
    [属性]：匹配带有指定属性的元素
  </li>
<li>
    [属性=value]：匹配属性=value的元素
  </li>
<li>
    [属性!=value]：匹配属性!=value的元素
  </li>
<li>
    [属性^=value]：匹配属性以value开头的元素
  </li>
<li>
    [属性$=value]：匹配属性以value结尾的元素
  </li>
<li>
    [属性*=value]：匹配属性以包含value的元素
  </li>
<li>
    [属性1=value1][属性2=value2]：同时具有属性1和属性2的元素
  </li>
</ol>
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;:text[class]&#8217;).addClass(&#8216;indianred&#8217;);	//带有class属性的文本框元素
</p>
<p>
  		//$(&#8216;[class]&#8217;).addClass(&#8216;indianred&#8217;);			//带有class属性的所有元素
</p>
<p>
  		//$(&#8216;:text[name=firstname]&#8217;).addClass(&#8216;indianred&#8217;);	//name=firstname的文本框元素
</p>
<p>
  		//$(&#8216;:text[name!=firstname]&#8217;).addClass(&#8216;indianred&#8217;);	//name!=firstname的文本框元素
</p>
<p>
  		//$(&#8216;:text[name^=first]&#8217;).addClass(&#8216;indianred&#8217;);		//name属性的值以first开头的元素
</p>
<p>
  		//$(&#8216;:text[name$=name]&#8217;).addClass(&#8216;indianred&#8217;);		//name属性的值以name结尾的元素
</p>
<p>
  		//$(&#8216;:text[name*=stna]&#8217;).addClass(&#8216;indianred&#8217;);		//name属性中带有stna的元素
</p>
<p>
  		$(&#8216;:text[name$=name][class]&#8217;).addClass(&#8216;indianred&#8217;);//name属性的值以name结尾的元素，同时带有class属性
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; name=&#8221;firstname&#8221; value=&#8221;张&#8221; class=&#8217;stu&#8217;  /&gt; &lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; name=&#8221;middlename&#8221; value=&#8221;三&#8221; /&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; name=&#8221;lastname&#8221; value=&#8221;峰&#8221; /&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; name=&#8221;firstcity&#8221; value=&#8221;上海&#8221; class /&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221; /&gt;
</p>
<p>
  &lt;div class=&#8221;&#8221;&gt;锄禾日当午&lt;/div&gt;
</p>
<h2>操作属性</h2>
<ol>
<li>
  jQuery对象.attr(属性)：获取对象的属性值，只获取第一个元素
</li>
<li>
  jQuery对象.attr(属性,值)：将值付给所有的jQuery对象
</li>
<li>
  jQuery对象.attr(属性,function(){});	//将函数的返回值付给属性
</li>
<li>
  jQuery对象.attr({属性:属性值,属性:属性值})
</li>
<li>
  jQuery对象.removeAttr(属性名)
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1058" height="386" src="/wp-content/uploads/2018/05/word-image-3062.png" class="wp-image-3463" srcset="/wp-content/uploads/2018/05/word-image-3062.png 1058w, /wp-content/uploads/2018/05/word-image-3062-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3062-768x280.png 768w, /wp-content/uploads/2018/05/word-image-3062-1024x374.png 1024w" sizes="(max-width: 1058px) 100vw, 1058px" /></p>
<h2>操作类</h2>
<ol>
<li>
  addClass(类名)——添加类
</li>
<li>
  removeClass(类名)——删除类
</li>
<li>
  toggleClass(类名)——交替
</li>
</ol>
<p><img loading="lazy" decoding="async" width="779" height="379" src="/wp-content/uploads/2018/05/word-image-3063.png" class="wp-image-3464" srcset="/wp-content/uploads/2018/05/word-image-3063.png 779w, /wp-content/uploads/2018/05/word-image-3063-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3063-768x374.png 768w" sizes="(max-width: 779px) 100vw, 779px" /></p>
<h2>直接样式操作</h2>
<ol>
<li>
  css(name)：获取样式的值
</li>
<li>
  css(name,value)：给样式赋值
</li>
<li>
  css({样式:值，样式:值})
</li>
</ol>
<p><img loading="lazy" decoding="async" width="808" height="228" src="/wp-content/uploads/2018/05/word-image-3064.png" class="wp-image-3465" srcset="/wp-content/uploads/2018/05/word-image-3064.png 808w, /wp-content/uploads/2018/05/word-image-3064-300x85.png 300w, /wp-content/uploads/2018/05/word-image-3064-768x217.png 768w" sizes="(max-width: 808px) 100vw, 808px" /></p>
<h2>offset()：偏移</h2>
<p>
  坐标原点是浏览器客户端的左上角
</p>
<p><img loading="lazy" decoding="async" width="892" height="344" src="/wp-content/uploads/2018/05/word-image-3065.png" class="wp-image-3466" srcset="/wp-content/uploads/2018/05/word-image-3065.png 892w, /wp-content/uploads/2018/05/word-image-3065-300x116.png 300w, /wp-content/uploads/2018/05/word-image-3065-768x296.png 768w" sizes="(max-width: 892px) 100vw, 892px" /></p>
<p>
  注意：
</p>
<p><img loading="lazy" decoding="async" width="574" height="179" src="/wp-content/uploads/2018/05/word-image-3066.png" class="wp-image-3467" srcset="/wp-content/uploads/2018/05/word-image-3066.png 574w, /wp-content/uploads/2018/05/word-image-3066-300x94.png 300w" sizes="(max-width: 574px) 100vw, 574px" /></p>
<h2>宽度、高度操作</h2>
<ol>
<li>
  width()：获取宽度
</li>
<li>
  width(value)：设置宽度
</li>
<li>
  height()：获取高度
</li>
<li>
  height(value)：设置高度
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1019" height="397" src="/wp-content/uploads/2018/05/word-image-3067.png" class="wp-image-3468" srcset="/wp-content/uploads/2018/05/word-image-3067.png 1019w, /wp-content/uploads/2018/05/word-image-3067-300x117.png 300w, /wp-content/uploads/2018/05/word-image-3067-768x299.png 768w" sizes="(max-width: 1019px) 100vw, 1019px" /></p>
<h2>操作HTML和文本</h2>
<ol>
<li>
  html()：获取HTML代码
</li>
<li>
  html(value)：将value作为HTML付给元素
</li>
<li>
  text()：获取文本
</li>
<li>
  text(value)：将value的值作为文本付给元素
</li>
</ol>
<p><img loading="lazy" decoding="async" width="759" height="227" src="/wp-content/uploads/2018/05/word-image-3068.png" class="wp-image-3469" srcset="/wp-content/uploads/2018/05/word-image-3068.png 759w, /wp-content/uploads/2018/05/word-image-3068-300x90.png 300w" sizes="(max-width: 759px) 100vw, 759px" /></p>
<h2>值操作</h2>
<ol>
<li>
  val()：获取值
</li>
<li>
  val(value)：给value属性赋值
</li>
</ol>
<p><img loading="lazy" decoding="async" width="628" height="190" src="/wp-content/uploads/2018/05/word-image-3069.png" class="wp-image-3470" srcset="/wp-content/uploads/2018/05/word-image-3069.png 628w, /wp-content/uploads/2018/05/word-image-3069-300x91.png 300w" sizes="(max-width: 628px) 100vw, 628px" /></p>
<h2>each循环</h2>
<p>
  方法一：$.each(数组/对象，回调函数)
</p>
<p>
  方法二：jQuery元素.each(回调函数)
</p>
<p><img loading="lazy" decoding="async" width="798" height="226" src="/wp-content/uploads/2018/05/word-image-3070.png" class="wp-image-3471" srcset="/wp-content/uploads/2018/05/word-image-3070.png 798w, /wp-content/uploads/2018/05/word-image-3070-300x85.png 300w, /wp-content/uploads/2018/05/word-image-3070-768x218.png 768w" sizes="(max-width: 798px) 100vw, 798px" /></p>
<h2>例题（复选框选择）</h2>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//全选
</p>
<p>
      $(&#8216;:button:first&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;:checkbox&#8217;).attr(&#8216;checked&#8217;,&#8217;checked&#8217;);
</p>
<p>
      });
</p>
<p>
  	//反选
</p>
<p>
  	$(&#8216;:button:eq(1)&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;:checkbox&#8217;).each(function(index, element) {
</p>
<p>
             	$(this).attr(&#8216;checked&#8217;,!$(this).attr(&#8216;checked&#8217;));
</p>
<p>
          });
</p>
<p>
      });
</p>
<p>
  	//取消全选
</p>
<p>
  	$(&#8216;:button:last&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;:checkbox&#8217;).removeAttr(&#8216;checked&#8217;);
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;全选&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;反选&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;取消全选&#8221; /&gt;
</p>
<p>
  &lt;form&gt;
</p>
<p>
  	&lt;input type=&#8221;checkbox&#8221; value=&#8221;读书&#8221; name=&#8221;hobby&#8221; /&gt;读书&lt;br /&gt;
</p>
<p>
      &lt;input type=&#8221;checkbox&#8221; value=&#8221;游泳&#8221; name=&#8221;hobby&#8221;/&gt;游泳&lt;br /&gt;
</p>
<p>
      &lt;input type=&#8221;checkbox&#8221; value=&#8221;看报&#8221; name=&#8221;hobby&#8221;/&gt;看报&lt;br /&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p>
  脚下留心：jQuery版本不同，有少部分方法也会有差异。
</p>
<p>
  多学一招：通过val()实现选中功能
</p>
<p><img loading="lazy" decoding="async" width="751" height="366" src="/wp-content/uploads/2018/05/word-image-3071.png" class="wp-image-3472" srcset="/wp-content/uploads/2018/05/word-image-3071.png 751w, /wp-content/uploads/2018/05/word-image-3071-300x146.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></p>
<ol>
<li>
  能够在html代码中引入jQuery库
</li>
<li>
  能够理解选择器的作用
</li>
<li>
  能够说出或使用多种选择器
</li>
<li>
  能够组合使用选择器
</li>
<li>
  能够使用jQuery操作html属性
</li>
<li>
  能够使用jQuery操作css属性
</li>
<li>
  能够熟练使用jQuery()的页面载入事件ready()
</li>
<li>
  能够理解each()的作用
</li>
<li>
  能够使用each()方法遍历jQuery对象
</li>
<li>
  能够解释dom对象和jQuery对象的区别
</li>
<li>
  能够将dom对象和jQuery对象相互转换
</li>
<li>
  能够使用bind()方法绑定事件
</li>
<li>
  能够熟练使用jQuery的常规事件绑定语法
</li>
<li>
  能够使用事件切换方法hover(),toggle()
</li>
<li>
  能够使用jQuery的基本特效方法 show(),hide(),toggle()
</li>
<li>
  能够使用jQuery的滑动特效方法 slideDown(),slideUp(),slideToggle()
</li>
<li>
  能够使用jQuery的淡入淡出特效方法
</li>
<li>
  能够将内容插入到元素内部或外部
</li>
<li>
  能够清空元素内容或删除元素本身
</li>
<li>
  能够使用replaceWith()替换元素
</li>
<li>
  能够复制指定元素
</li>
<li>
  能够把内容从外面包裹上新元素
</li>
<li>
  能够使用元素查找或匹配的多个方法
</li>
<li>
  能够理解jQuery中插件的作用
</li>
<li>
  能够制作自定义插件
</li>
<li>
  能够使用jQuery实现ajax的get请求
</li>
<li>
  能够使用jQuery实现ajax的post请求
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3458.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jquery（二）元素集合查找、链式操作、DOM、缓存数据</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3437.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3437.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 09:48:15 +0000</pubDate>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[前端框架]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[元素集合查找]]></category>
		<category><![CDATA[缓存数据]]></category>
		<category><![CDATA[链式操作]]></category>
		<guid isPermaLink="false">/?p=3437</guid>

					<description><![CDATA[jQuery第二讲 过滤元素 filter()：过滤元素 hasClass()：检查有没有指定的类 is()： [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>jQuery第二讲</h1>
<h2>过滤元素</h2>
<ol>
<li>
  filter()：过滤元素
</li>
<li>
  hasClass()：检查有没有指定的类
</li>
<li>
  is()：检查有没有指定的选择器
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1049" height="481" src="/wp-content/uploads/2018/05/word-image-3040.png" class="wp-image-3439" srcset="/wp-content/uploads/2018/05/word-image-3040.png 1049w, /wp-content/uploads/2018/05/word-image-3040-300x138.png 300w, /wp-content/uploads/2018/05/word-image-3040-768x352.png 768w, /wp-content/uploads/2018/05/word-image-3040-1024x470.png 1024w" sizes="(max-width: 1049px) 100vw, 1049px" /></p>
<h2>在元素集合中查找</h2>
<ol>
<li>
  find()：在子元素中查找
</li>
<li>
  children()：匹配子元素集合
</li>
<li>
  next()：查找下一个元素
</li>
<li>
  nextAll()：后面所有元素
</li>
<li>
  prev()：前面的元素
</li>
<li>
  prevAll()：前面所有元素
</li>
<li>
  siblings()：所有同辈元素
</li>
<li>
  parent()：元素的父节点
</li>
<li>
  parents()：元素的父节点的集合
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8220;:button&#8221;).click(function(e) {
</p>
<p>
          //$(&#8216;form&#8217;).find(&#8216;:text&#8217;).css(&#8216;background-color&#8217;,&#8217;#930&#8242;);	//在子元素中查找
</p>
<p>
  		/*
</p>
<p>
  		$(&#8216;form&gt;fieldset&#8217;).children(&#8216;input&#8217;).each(function(index, element) {		//获取子元素
</p>
<p>
              console.log($(this));
</p>
<p>
          });
</p>
<p>
  		*/
</p>
<p>
  		//$(&#8216;#firstname&#8217;).next().next().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		//$(&#8216;#firstname&#8217;).nextAll().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		//$(&#8216;#city&#8217;).prev().prev().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		//$(&#8216;#city&#8217;).prevAll().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		//$(&#8216;#lastname&#8217;).siblings().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		//$(&#8216;#lastname&#8217;).parent().css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
</p>
<p>
  		$(&#8216;#lastname&#8217;).parents(&#8216;body&#8217;).css(&#8216;background-color&#8217;,&#8217;#930&#8242;);
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;p&gt;锄禾日当午&lt;/p&gt;
</p>
<p>
  &lt;form&gt;
</p>
<p>
      &lt;fieldset&gt;
</p>
<p>
      	&lt;legend&gt;在元素中查找&lt;/legend&gt;
</p>
<p>
      姓：&lt;input type=&#8221;text&#8221; id=&#8221;firstname&#8221; value=&#8221;张&#8221; /&gt;&lt;br /&gt;
</p>
<p>
      名：&lt;input type=&#8221;text&#8221; id=&#8221;lastname&#8221; value=&#8221;三峰&#8221; /&gt;&lt;br /&gt;
</p>
<p>
      城市：&lt;input type=&#8221;text&#8221; id=&#8221;city&#8221; value=&#8221;上海&#8221; /&gt;&lt;br&gt;
</p>
<p>
      &lt;input type=&#8221;button&#8221; value=&#8221;点击&#8221; id=&#8221;btn&#8221; /&gt;
</p>
<p>
      &lt;/fieldset&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<h2>链式操作</h2>
<p>
  把多个操作用“.”连成一行，用来简化操作。
</p>
<p>
  原理：每个方法执行完毕后，将当前对象返回出来。
</p>
<p><img loading="lazy" decoding="async" width="634" height="69" src="/wp-content/uploads/2018/05/word-image-3041.png" class="wp-image-3440" srcset="/wp-content/uploads/2018/05/word-image-3041.png 634w, /wp-content/uploads/2018/05/word-image-3041-300x33.png 300w" sizes="(max-width: 634px) 100vw, 634px" /></p>
<h2>例题</h2>
<p><img loading="lazy" decoding="async" width="1233" height="386" src="/wp-content/uploads/2018/05/word-image-3042.png" class="wp-image-3441" srcset="/wp-content/uploads/2018/05/word-image-3042.png 1233w, /wp-content/uploads/2018/05/word-image-3042-300x94.png 300w, /wp-content/uploads/2018/05/word-image-3042-768x240.png 768w, /wp-content/uploads/2018/05/word-image-3042-1024x321.png 1024w" sizes="(max-width: 1233px) 100vw, 1233px" /></p>
<h2>DOM操作</h2>
<h3>在元素的内部添加内容</h3>
<ol>
<li>
  在内部的后面添加内容</p>
<ol>
<li>
    A. append(B)：将B添加到A里面的后面
  </li>
<li>
    A. appendTo(B)：将A添加到B里面的后面
  </li>
</ol>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1095" height="264" src="/wp-content/uploads/2018/05/word-image-3043.png" class="wp-image-3442" srcset="/wp-content/uploads/2018/05/word-image-3043.png 1095w, /wp-content/uploads/2018/05/word-image-3043-300x72.png 300w, /wp-content/uploads/2018/05/word-image-3043-768x185.png 768w, /wp-content/uploads/2018/05/word-image-3043-1024x247.png 1024w" sizes="(max-width: 1095px) 100vw, 1095px" /></p>
<ol>
<li>
  在内部的前面添加内容</p>
<ol>
<li>
    A.prepend(B)：在A的内部的前面添加B的内容
  </li>
<li>
    A.prependTo(B)：将A添加到B的内部的前面
  </li>
</ol>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="754" height="248" src="/wp-content/uploads/2018/05/word-image-3044.png" class="wp-image-3443" srcset="/wp-content/uploads/2018/05/word-image-3044.png 754w, /wp-content/uploads/2018/05/word-image-3044-300x99.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></p>
<h3>在元素的外部添加内容</h3>
<ol>
<li>
  在元素外部的后面</p>
<ol>
<li>
    A.after(B)：将B插入到A外部的后面
  </li>
<li>
    A.insertAfter(B)：将A插入到B的外部的后面
  </li>
</ol>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="821" height="266" src="/wp-content/uploads/2018/05/word-image-3045.png" class="wp-image-3444" srcset="/wp-content/uploads/2018/05/word-image-3045.png 821w, /wp-content/uploads/2018/05/word-image-3045-300x97.png 300w, /wp-content/uploads/2018/05/word-image-3045-768x249.png 768w" sizes="(max-width: 821px) 100vw, 821px" /></p>
<ol>
<li>
  在元素外部的前面</p>
<ol>
<li>
    A.before(B)：将B插入到A的外部的前面
  </li>
<li>
    A.insert Before(B)：将A插入到B的外部的前面
  </li>
</ol>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="984" height="269" src="/wp-content/uploads/2018/05/word-image-3046.png" class="wp-image-3445" srcset="/wp-content/uploads/2018/05/word-image-3046.png 984w, /wp-content/uploads/2018/05/word-image-3046-300x82.png 300w, /wp-content/uploads/2018/05/word-image-3046-768x210.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></p>
<h2>例题（年月日）</h2>
<p>
  效果：选择年和月，自动显示对应的天数
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  //添加option标签
</p>
<p>
  function insertOption(end,target){
</p>
<p>
  	for(var i=1;i&lt;=end;i++){
</p>
<p>
  		$(&#8216;&lt;option&gt;&#8217;).html(i).attr(&#8216;value&#8217;,i).appendTo($(&#8216;#&#8217;+target));
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  //添加年
</p>
<p>
  function addYear(){
</p>
<p>
  	var yy=&lt;?php echo date(&#8216;Y&#8217;)?&gt;;
</p>
<p>
  	for(var i=yy;i&gt;=yy-100;i&#8211;){
</p>
<p>
  		$(&#8216;&lt;option&gt;&#8217;).html(i).attr(&#8216;value&#8217;,i).appendTo($(&#8216;#year&#8217;));
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  //添加月
</p>
<p>
  function addMonth(){
</p>
<p>
  	insertOption(12,&#8217;month&#8217;)
</p>
<p>
  }
</p>
<p>
  //添加日
</p>
<p>
  function addDay(){
</p>
<p>
  	$(&#8216;#day&#8217;).html(&#8221;);
</p>
<p>
  	var yy=$(&#8216;#year&#8217;).val();
</p>
<p>
  	var mm=$(&#8216;#month&#8217;).val();
</p>
<p>
  	if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12){
</p>
<p>
  		insertOption(31,&#8217;day&#8217;);
</p>
<p>
  	}else if(mm==2){
</p>
<p>
  		if(yy%4==0 &amp;&amp; yy%100!=0 || yy%400==0){
</p>
<p>
  			insertOption(29,&#8217;day&#8217;)
</p>
<p>
  		}else{
</p>
<p>
  			insertOption(28,&#8217;day&#8217;);
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  	else
</p>
<p>
  		insertOption(30,&#8217;day&#8217;);
</p>
<p>
  }
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      addYear();
</p>
<p>
  	addMonth();
</p>
<p>
  	addDay();
</p>
<p>
  	$(&#8216;#year,#month&#8217;).change(function(e) {
</p>
<p>
          addDay();
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;&#8221;&gt;
</p>
<p>
    &lt;select name=&#8221;year&#8221; id=&#8221;year&#8221;&gt;&lt;/select&gt;年
</p>
<p>
    &lt;select name=&#8221;month&#8221; id=&#8221;month&#8221;&gt;&lt;/select&gt;月
</p>
<p>
    &lt;select name=&#8221;day&#8221; id=&#8221;day&#8221;&gt;&lt;/select&gt;日
</p>
<p>
  &lt;/form&gt;
</p>
<p>
  运行结果
</p>
<p><img loading="lazy" decoding="async" width="354" height="91" src="/wp-content/uploads/2018/05/word-image-3047.png" class="wp-image-3446" srcset="/wp-content/uploads/2018/05/word-image-3047.png 354w, /wp-content/uploads/2018/05/word-image-3047-300x77.png 300w" sizes="(max-width: 354px) 100vw, 354px" /></p>
<h2>例题（模拟126邮箱注册效果）</h2>
<h3>Sprits技术</h3>
<p>
  将页面用到的许多小图拼到一个大图上，通过CSS来显示不同的区域。可以有效的减少往返次数。
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  /*按钮的样式*/
</p>
<p>
  .btn{
</p>
<p>
  	width:119px;
</p>
<p>
  	height:37px;
</p>
<p>
  	background-image:url(images/glb_v2.png);
</p>
<p>
  	background-repeat:no-repeat;
</p>
<p>
  	background-position:-146px -362px;
</p>
<p>
  	cursor:pointer;
</p>
<p>
  }
</p>
<p>
  /*鼠标移动到按钮上*/
</p>
<p>
  .btn:hover{
</p>
<p>
  	background-position:-289px -362px;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  用户名：&lt;input type=&#8221;text&#8221; /&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;返回&#8221; class=&#8221;btn&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;提交&#8221; class=&#8221;btn&#8221; /&gt;
</p>
<p>
  运行结果
</p>
<p><img loading="lazy" decoding="async" width="354" height="76" src="/wp-content/uploads/2018/05/word-image-3048.png" class="wp-image-3447" srcset="/wp-content/uploads/2018/05/word-image-3048.png 354w, /wp-content/uploads/2018/05/word-image-3048-300x64.png 300w" sizes="(max-width: 354px) 100vw, 354px" /></p>
<h3>模仿126邮箱注册</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  *{
</p>
<p>
  	margin:0px;
</p>
<p>
  	padding:0px;
</p>
<p>
  	font-size:14px;
</p>
<p>
  	font-family:&#8217;微软雅黑&#8217;;
</p>
<p>
  }
</p>
<p>
  dt,dd{
</p>
<p>
  	float:left;
</p>
<p>
  }
</p>
<p>
  .txt{
</p>
<p>
  	width:300px;
</p>
<p>
  	height:17px;
</p>
<p>
  	border:#7B7B7B solid 1xp;
</p>
<p>
  }
</p>
<p>
  .bg&gt;span,.span{
</p>
<p>
  	width:14px;
</p>
<p>
  	height:14px;
</p>
<p>
  	display:inline-block;
</p>
<p>
  	background:url(images/glb_v2.png) no-repeat -36px -288px;
</p>
<p>
  }
</p>
<p>
  .bg{
</p>
<p>
  	color:#C00;
</p>
<p>
  	display:none;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//设置样式
</p>
<p>
      $(&#8216;#pwd&#8217;).blur(function(e) {
</p>
<p>
          var pwd=$(this).val();
</p>
<p>
  		if(!(pwd.length&gt;=6 &amp;&amp; pwd.length&lt;=16)){
</p>
<p>
  			//方法一：
</p>
<p>
  			/*
</p>
<p>
  			$(&#8216;dd&gt;div:first&#8217;).hide();	//隐藏
</p>
<p>
  			$(&#8216;dd&gt;div:last&#8217;).show();	//显示
</p>
<p>
  			*/
</p>
<p>
  			//方法二
</p>
<p>
  			var span=$(&#8216;&lt;span&gt;&#8217;).addClass(&#8216;span&#8217;);
</p>
<p>
  			$(&#8216;dd&gt;div:first&#8217;).html(&#8216;密码长度是6~16个字符&#8217;).prepend(span)
</p>
<p>
  		}
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;form&gt;
</p>
<p>
  &lt;dl&gt;
</p>
<p>
  	&lt;dt&gt;密码：&lt;/dt&gt;
</p>
<p>
      &lt;dd&gt;
</p>
<p>
      	&lt;input type=&#8221;password&#8221; id=&#8221;pwd&#8221; class=&#8221;txt&#8221; /&gt;
</p>
<p>
          &lt;div&gt;6~16个字符，区分大小写&lt;/div&gt;
</p>
<p>
          &lt;!&#8211;&lt;div class=&#8221;bg&#8221;&gt;&lt;span&gt;&lt;/span&gt;密码长度是6~16个字符&lt;/div&gt; &#8211;&gt;
</p>
<p>
      &lt;/dd&gt;
</p>
<p>
  &lt;/dl&gt;
</p>
<p>
  &lt;/form&gt;
</p>
<p><img loading="lazy" decoding="async" width="386" height="52" src="/wp-content/uploads/2018/05/word-image-3049.png" class="wp-image-3448" srcset="/wp-content/uploads/2018/05/word-image-3049.png 386w, /wp-content/uploads/2018/05/word-image-3049-300x40.png 300w" sizes="(max-width: 386px) 100vw, 386px" /></p>
<h2>替换DOM元素</h2>
<ol>
<li>
  replaceAll(选择器)
</li>
<li>
  replaceWith(内容)
</li>
</ol>
<p><img loading="lazy" decoding="async" width="683" height="228" src="/wp-content/uploads/2018/05/word-image-3050.png" class="wp-image-3449" srcset="/wp-content/uploads/2018/05/word-image-3050.png 683w, /wp-content/uploads/2018/05/word-image-3050-300x100.png 300w" sizes="(max-width: 683px) 100vw, 683px" /></p>
<p>
  例题
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  .light{
</p>
<p>
  	color:#F00;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#key&#8217;).blur(function(e) {
</p>
<p>
  		if($(this).val()==&#8221;)
</p>
<p>
  			return;
</p>
<p>
  		//清空样式
</p>
<p>
  		$(&#8216;.light&#8217;).each(function(index, element) {
</p>
<p>
              $(this).replaceWith($(this).text());	//通过自己的文本替换自己节点
</p>
<p>
          });
</p>
<p>
  		//添加样式
</p>
<p>
  		var reg=new RegExp($(this).val(),&#8217;g&#8217;);	//实例化正则表达式而
</p>
<p>
          var str=$(&#8216;#content&#8217;).html().replace(reg,'&lt;span class=&#8221;light&#8221;&gt;&#8217;+$(this).val()+'&lt;/span&gt;&#8217;); //内容替换
</p>
<p>
  		$(&#8216;#content&#8217;).html(str);
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; id=&#8221;key&#8221; /&gt;
</p>
<p>
  &lt;div id=&#8221;content&#8221;&gt;
</p>
<p>
  &lt;h3&gt;月饼机_月饼机价格月饼机老品牌值得信赖&lt;/h3&gt;
</p>
<p>
  杭州旭众新型小型月饼机厂家 出面出馅更加稳定,小型月饼机厂家 一机多用,价格实惠!老品牌小型月饼机厂家 值得信赖.更有服务到家,全国联保.购机无忧!小型月饼机厂家
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  运行结果
</p>
<p><img loading="lazy" decoding="async" width="1078" height="188" src="/wp-content/uploads/2018/05/word-image-3051.png" class="wp-image-3450" srcset="/wp-content/uploads/2018/05/word-image-3051.png 1078w, /wp-content/uploads/2018/05/word-image-3051-300x52.png 300w, /wp-content/uploads/2018/05/word-image-3051-768x134.png 768w, /wp-content/uploads/2018/05/word-image-3051-1024x179.png 1024w" sizes="(max-width: 1078px) 100vw, 1078px" /></p>
<h2>删除DOM元素</h2>
<ol>
<li>
  empty()：清空节点中的内容
</li>
<li>
  remove()：删除节点
</li>
</ol>
<p><img loading="lazy" decoding="async" width="731" height="378" src="/wp-content/uploads/2018/05/word-image-3052.png" class="wp-image-3451" srcset="/wp-content/uploads/2018/05/word-image-3052.png 731w, /wp-content/uploads/2018/05/word-image-3052-300x155.png 300w" sizes="(max-width: 731px) 100vw, 731px" /></p>
<h2>克隆DOM元素</h2>
<ol>
<li>
  clone()：只复制对象节点
</li>
<li>
  clone(true)：复制对象节点及对应的事件
</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="285" src="/wp-content/uploads/2018/05/word-image-3053.png" class="wp-image-3452" srcset="/wp-content/uploads/2018/05/word-image-3053.png 849w, /wp-content/uploads/2018/05/word-image-3053-300x101.png 300w, /wp-content/uploads/2018/05/word-image-3053-768x258.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<h2>获取对象的长度和对象的索引</h2>
<p>
  获取长度的方法
</p>
<ol>
<li>
  length
</li>
<li>
  size()
</li>
</ol>
<p>
  获取元素的索引
</p>
<p>
  index()：索引号从0开始
</p>
<p><img loading="lazy" decoding="async" width="887" height="321" src="/wp-content/uploads/2018/05/word-image-3054.png" class="wp-image-3453" srcset="/wp-content/uploads/2018/05/word-image-3054.png 887w, /wp-content/uploads/2018/05/word-image-3054-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3054-768x278.png 768w" sizes="(max-width: 887px) 100vw, 887px" /></p>
<h2>DOM对象和jQuery对象互换</h2>
<p>
  如果要用jQuery的方法就必须要转成jQuery对象
</p>
<p>
  如果要用JS方法必须转成DOM对象
</p>
<p>
  实现转换：
</p>
<ol>
<li>
  将DOM对象转成JQuery对象：通过$()或jQuery()
</li>
<li>
  将JQuery对象转成DOM对象：通过get()或数组的方式
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1110" height="211" src="/wp-content/uploads/2018/05/word-image-3055.png" class="wp-image-3454" srcset="/wp-content/uploads/2018/05/word-image-3055.png 1110w, /wp-content/uploads/2018/05/word-image-3055-300x57.png 300w, /wp-content/uploads/2018/05/word-image-3055-768x146.png 768w, /wp-content/uploads/2018/05/word-image-3055-1024x195.png 1024w" sizes="(max-width: 1110px) 100vw, 1110px" /></p>
<h2>缓存数据</h2>
<ol>
<li>
  data(name)：获取缓存数据
</li>
<li>
  data(name,value)：缓存数据
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1181" height="499" src="/wp-content/uploads/2018/05/word-image-3056.png" class="wp-image-3455" srcset="/wp-content/uploads/2018/05/word-image-3056.png 1181w, /wp-content/uploads/2018/05/word-image-3056-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3056-768x324.png 768w, /wp-content/uploads/2018/05/word-image-3056-1024x433.png 1024w" sizes="(max-width: 1181px) 100vw, 1181px" /></p>
<h2>几个常用的方法</h2>
<p>
  1、$.merge()
</p>
<p>
  2、$.trim()
</p>
<p><img loading="lazy" decoding="async" width="730" height="114" src="/wp-content/uploads/2018/05/word-image-3057.png" class="wp-image-3456" srcset="/wp-content/uploads/2018/05/word-image-3057.png 730w, /wp-content/uploads/2018/05/word-image-3057-300x47.png 300w" sizes="(max-width: 730px) 100vw, 730px" /></p>
<ol>
<li>
  能够解释dom对象和jQuery对象的区别
</li>
<li>
  能够将dom对象和jQuery对象相互转换
</li>
<li>
  能够将内容插入到元素内部或外部
</li>
<li>
  能够清空元素内容或删除元素本身
</li>
<li>
  能够使用replaceWith()替换元素
</li>
<li>
  能够复制指定元素
</li>
<li>
  能够把内容从外面包裹上新元素
</li>
<li>
  能够使用元素查找或匹配的多个方法
</li>
<li>
  能够使用bind()方法绑定事件
</li>
<li>
  能够熟练使用jQuery的常规事件绑定语法
</li>
<li>
  能够使用事件切换方法hover(),toggle()
</li>
<li>
  能够使用jQuery的基本特效方法 show(),hide(),toggle()
</li>
<li>
  能够使用jQuery的滑动特效方法 slideDown(),slideUp(),slideToggle()
</li>
<li>
  能够使用jQuery的淡入淡出特效方法
</li>
<li>
  能够理解jQuery中插件的作用
</li>
<li>
  能够制作自定义插件
</li>
<li>
  能够使用jQuery实现ajax的get请求
</li>
<li>
  能够使用jQuery实现ajax的post请求
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3437.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jquery（三）事件处理、DOM操作、事件委托</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3411.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3411.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 09:45:41 +0000</pubDate>
				<category><![CDATA[Jquery]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[前端框架]]></category>
		<category><![CDATA[DOM操作]]></category>
		<category><![CDATA[事件处理]]></category>
		<category><![CDATA[事件委托]]></category>
		<guid isPermaLink="false">/?p=3411</guid>

					<description><![CDATA[jQuery（三） 回顾 查找元素 filter()：过滤元素 （not()） hasClass()：是否具有 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1> jQuery（三）</h1>
<h2>回顾</h2>
<ol>
<li>
  查找元素</p>
<ol>
<li>
    filter()：过滤元素 （not()）
  </li>
<li>
    hasClass()：是否具有指定类
  </li>
<li>
    is()：是不是
  </li>
<li>
    find()：在子元素中查找
  </li>
<li>
    children()：获取子元素的集合
  </li>
<li>
    next()：下一个元素
  </li>
<li>
    nextAll()：后面所有的元素
  </li>
<li>
    prev()：前面的一个元素
  </li>
<li>
    prevAll()：前面所有的元素
  </li>
<li>
    parent()：父级元素
  </li>
<li>
    parents()：所有的父级元素
  </li>
<li>
    sibling()：同级元素
  </li>
</ol>
</li>
<li>
  DOM操作</p>
<ol>
<li>
    在内部添加元素</p>
<ol>
<li>
      A.append(B)：将B插入到A的内部的后面
    </li>
<li>
      A.appendTo(B)：将A插入到B的内部的后面
    </li>
<li>
      A.prepend(B)：将B插入到A的内部的前面
    </li>
<li>
      A.prependTo(B)：将A插入到B的内部的前面
    </li>
</ol>
</li>
<li>
    在外部添加元素</p>
<ol>
<li>
      A.after(B)：将B插入到A的外部的后面
    </li>
<li>
      A.insertAfter(B)：将A插入到B的外部的后面
    </li>
<li>
      A.before(B)：将B插入到A的外部的前面
    </li>
<li>
      A.insertBefore(B)：将A插入到B的外部的前面
    </li>
</ol>
</li>
<li>
    替换DOM元素</p>
<ol>
<li>
      A.replaceAll(B)：用A替换所有的B
    </li>
<li>
      A.replaceWith(B)：用B替换A
    </li>
</ol>
</li>
<li>
    删除DOM元素</p>
<ol>
<li>
      empty()：清空元素的内容
    </li>
<li>
      remove()：删除元素
    </li>
</ol>
</li>
<li>
    克隆DOM元素</p>
<ol>
<li>
      clone()：复制节点，不复制对应的事件
    </li>
<li>
      clone(true)：复制节点和对应的事件
    </li>
</ol>
</li>
</ol>
</li>
<li>
  一些常用的方法和属性</p>
<ol>
<li>
    size()：获取节点集合的长度
  </li>
<li>
    length：获取节点集合的长度
  </li>
<li>
    index()：获取节点的索引
  </li>
<li>
    data()：缓存或获取缓存数据
  </li>
<li>
    $.trim()：去空格
  </li>
<li>
    $.merge()：合并数组
  </li>
</ol>
</li>
<li>
  DOM和jQuery对象互换</p>
<ol>
<li>
    通过$()和jquery()方法将DOM转成JQuery对象
  </li>
<li>
    通过get()和[]的方法将jQuery的对象转成DOM对象
  </li>
</ol>
</li>
<li>
  链式操作：每个方法执行完毕后返回当前对象，所以我们能够实现链式操作。
</li>
</ol>
<h2>jQuery设置事件处理</h2>
<p>
  1、$().事件类型(事件处理函数)		——设置事件处理
</p>
<p>
  2、$().事件类型()						——处罚事件处理
</p>
<p><img loading="lazy" decoding="async" width="741" height="195" src="/wp-content/uploads/2018/05/word-image-3017.png" class="wp-image-3413" srcset="/wp-content/uploads/2018/05/word-image-3017.png 741w, /wp-content/uploads/2018/05/word-image-3017-300x79.png 300w" sizes="(max-width: 741px) 100vw, 741px" /></p>
<p>
  脚下留心：JQuery事件和DOM事件基本是一一对应，比DOM事件少“on”这个单词。
</p>
<h2>$(document).ready()事件</h2>
<table>
<tr>
<td></td>
<td>
<p>
  DOM方式
</p>
</td>
<td>
<p>
  jQuery方式
</p>
</td>
</tr>
<tr>
<td>
<p>
  执行次数
</p>
</td>
<td>
<p>
  只有最后一个window.onload()起作用
</p>
</td>
<td>
<p>
  $(document).ready()可以无限制的使用
</p>
</td>
</tr>
<tr>
<td>
<p>
  执行时间
</p>
</td>
<td>
<p>
  在全部静态资源（文字，图片，js，样式）在浏览器显示完毕才执行加载事件
</p>
</td>
<td>
<p>
  只要静态资源在内存中形成DOM结构就开始执行，这时候可能内容在浏览器还没有显示。
</p>
</td>
</tr>
</table>
<p>
  很显然：$(document).ready()可以极大的提高web响应速度。
</p>
<p>
  多学一招：$(document).ready()可以简化为
</p>
<p><img loading="lazy" decoding="async" width="699" height="170" src="/wp-content/uploads/2018/05/word-image-3018.png" class="wp-image-3414" srcset="/wp-content/uploads/2018/05/word-image-3018.png 699w, /wp-content/uploads/2018/05/word-image-3018-300x73.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></p>
<h2>DOM操作练习</h2>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;:button&#8217;).click(function(e) {
</p>
<p>
          var i=$(&#8216;:button&#8217;).index($(this));	//找出索引号
</p>
<p>
  		if(i==0){	//全部左移
</p>
<p>
  			$(&#8216;select:first option&#8217;).appendTo($(&#8216;select:last&#8217;));
</p>
<p>
  		}
</p>
<p>
  		else if(i==1){	//选中左移
</p>
<p>
  			$(&#8216;select:first option:checked&#8217;).appendTo($(&#8216;select:last&#8217;));
</p>
<p>
  		}
</p>
<p>
  		else if(i==2){	//全部右移
</p>
<p>
  			$(&#8216;select:last option&#8217;).appendTo($(&#8216;select:first&#8217;));
</p>
</p>
<p>
  		}
</p>
<p>
  		else if(i==3){	//选中右移
</p>
<p>
  			$(&#8216;select:last option:checked&#8217;).appendTo($(&#8216;select:first&#8217;));
</p>
<p>
  		}
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;select size=&#8221;10&#8243; multiple=&#8221;multiple&#8221;&gt;
</p>
<p>
  	&lt;option&gt;张三&lt;/option&gt;
</p>
<p>
      &lt;option&gt;李四&lt;/option&gt;
</p>
<p>
      &lt;option&gt;王五&lt;/option&gt;
</p>
<p>
  	&lt;option&gt;赵六&lt;/option&gt;
</p>
<p>
  	&lt;option&gt;Tom&lt;/option&gt;
</p>
<p>
  	&lt;option&gt;Berry&lt;/option&gt;
</p>
<p>
  	&lt;option&gt;Ketty&lt;/option&gt;
</p>
<p>
  	&lt;option&gt;Rose&lt;/option&gt;
</p>
<p>
  &lt;/select&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;div&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;  &gt;&gt;  &#8221; title=&#8221;全部左移&#8221;/&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;  &gt;  &#8221; title=&#8221;左移&#8221;/&gt; &lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;  &lt;&lt;  &#8221; title=&#8217;全部右移&#8217;/&gt;&lt;br /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;  &lt;  &#8221; title=&#8217;右移&#8217;/&gt; &lt;br /&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;div&gt;
</p>
<p>
  &lt;select  size=&#8221;10&#8243; multiple=&#8221;multiple&#8221;&gt;&lt;/select&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="425" height="235" src="/wp-content/uploads/2018/05/word-image-3019.png" class="wp-image-3415" srcset="/wp-content/uploads/2018/05/word-image-3019.png 425w, /wp-content/uploads/2018/05/word-image-3019-300x166.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<h2>绑定事件（bind）</h2>
<p>
  语法：bind(事件,回调函数)
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(function(){
</p>
<p>
  	//1、绑定事件
</p>
<p>
  	/*
</p>
<p>
  	$(&#8216;#username&#8217;).bind(&#8216;mouseover&#8217;,function(){
</p>
<p>
  		if($(this).val()==&#8217;请输入用户名&#8217;)
</p>
<p>
  			$(this).val(&#8221;);
</p>
<p>
  	}).bind(&#8216;mouseout&#8217;,function(){
</p>
<p>
  		if($.trim($(this).val())==&#8221;)
</p>
<p>
  			$(this).val(&#8216;请输入用户名&#8217;);
</p>
<p>
  	})
</p>
<p>
  	*/
</p>
<p>
  	//2、通过json格式一次绑定多个事件
</p>
<p>
  	/*
</p>
<p>
  	var json={
</p>
<p>
  		&#8216;mouseover&#8217;:function(){
</p>
<p>
  			if($(this).val()==&#8217;请输入用户名&#8217;)
</p>
<p>
  				$(this).val(&#8221;);
</p>
<p>
  		},
</p>
<p>
  		&#8216;mouseout&#8217;:function(){
</p>
<p>
  			if($.trim($(this).val())==&#8221;)
</p>
<p>
  				$(this).val(&#8216;请输入用户名&#8217;);
</p>
<p>
  		}
</p>
<p>
  	};
</p>
<p>
  	$(&#8216;#username&#8217;).bind(json);
</p>
<p>
  	*/
</p>
<p>
  	//3、不同的事件，同一个事件处理
</p>
<p>
  	$(&#8216;#username&#8217;).bind(&#8216;click mouseover mouseout&#8217;,function(){
</p>
<p>
  		console.log(&#8216;aa&#8217;);
</p>
<p>
  	})
</p>
<p>
  })
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; id=&#8221;username&#8221; value=&#8221;请输入用户名&#8221; /&gt;
</p>
<h2>反绑定事件（unbind）</h2>
<p>
  如果一个元素不需要执行某个事件了，只需要反绑定即可。
</p>
<p>
  1、对象.unbind(事件)：反绑定某个事件
</p>
<p>
  2、对象.unbind()：反绑定所有事件
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  #btn{
</p>
<p>
  	width:100px;
</p>
<p>
  	height:50px;
</p>
<p>
  	cursor:pointer;
</p>
<p>
  	background-color:#F90;
</p>
<p>
  	color:#F00;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	var flag=false;		//开关
</p>
<p>
      $(&#8216;#btn&#8217;).click(function(e) {
</p>
<p>
  		if(!flag){
</p>
<p>
  			var t=5;
</p>
<p>
  			$(this).text(t);
</p>
<p>
  			var id=window.setInterval(function(){
</p>
<p>
  				$(&#8216;#btn&#8217;).text(&#8211;t);
</p>
<p>
  				if(t==0){
</p>
<p>
  					clearInterval(id);	//关闭时钟
</p>
<p>
  					//$(&#8216;#btn&#8217;).unbind(&#8216;click&#8217;);	//反绑定click事件
</p>
<p>
  					$(&#8216;#btn&#8217;).unbind();			//反绑定所有事件
</p>
<p>
  				}
</p>
<p>
  			},1000);
</p>
<p>
  			flag=true;
</p>
<p>
  		}
</p>
<p>
  		console.log(&#8216;抢红包&#8217;);
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div id=&#8221;btn&#8221;&gt;5秒之后关闭抢红包&lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="434" height="107" src="/wp-content/uploads/2018/05/word-image-3020.png" class="wp-image-3416" srcset="/wp-content/uploads/2018/05/word-image-3020.png 434w, /wp-content/uploads/2018/05/word-image-3020-300x74.png 300w" sizes="(max-width: 434px) 100vw, 434px" /></p>
<h2>一次性绑定（one）</h2>
<p><img loading="lazy" decoding="async" width="726" height="155" src="/wp-content/uploads/2018/05/word-image-3021.png" class="wp-image-3417" srcset="/wp-content/uploads/2018/05/word-image-3021.png 726w, /wp-content/uploads/2018/05/word-image-3021-300x64.png 300w" sizes="(max-width: 726px) 100vw, 726px" /></p>
<h2>事件委托和取消事件委托</h2>
<p>
  jQuery对象.live()  绑定在祖辈元素上的事件处理函数可以对后代的触发做出响应。
</p>
<p>
  jQuery对象.die() 从元素中删除通过live()绑定的事件
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	$(&#8216;li&#8217;).live(&#8216;click&#8217;,function(e) {	//将click事件绑定到li的祖辈元素中
</p>
<p>
          alert($(this).html());
</p>
<p>
      });
</p>
<p>
  	//添加li
</p>
<p>
      $(&#8216;:button:first&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;&lt;li&gt;重庆&lt;/li&gt;&#8217;).appendTo($(&#8216;ul&#8217;));
</p>
<p>
      });
</p>
<p>
  	//取消live绑定的事件
</p>
<p>
  	$(&#8216;:button:last&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;li&#8217;).die(&#8216;click&#8217;);	//取消通过live()绑定的click()事件
</p>
<p>
  		$(&#8216;li&#8217;).die();			//取消live绑定的所有事件
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li&gt;北京&lt;/li&gt;
</p>
<p>
      &lt;li&gt;上海&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;添加li&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;取消live绑定的事件&#8221; /&gt;
</p>
<h2>事件对象</h2>
<p>
  事件对象中保存着与事件有关的信息
</p>
<ol>
<li>
  通过事件对象阻止冒泡
</li>
<li>
  通过事件对象阻止浏览器的默认动作
</li>
</ol>
<p><img loading="lazy" decoding="async" width="910" height="398" src="/wp-content/uploads/2018/05/word-image-3022.png" class="wp-image-3418" srcset="/wp-content/uploads/2018/05/word-image-3022.png 910w, /wp-content/uploads/2018/05/word-image-3022-300x131.png 300w, /wp-content/uploads/2018/05/word-image-3022-768x336.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></p>
<h2>hover</h2>
<p>
  语法：hover(over_fun,out_fun)，此方法实现鼠标移到到元素上和离开元素的效果
</p>
<p><img loading="lazy" decoding="async" width="899" height="192" src="/wp-content/uploads/2018/05/word-image-3023.png" class="wp-image-3419" srcset="/wp-content/uploads/2018/05/word-image-3023.png 899w, /wp-content/uploads/2018/05/word-image-3023-300x64.png 300w, /wp-content/uploads/2018/05/word-image-3023-768x164.png 768w" sizes="(max-width: 899px) 100vw, 899px" /></p>
<h2>toggle</h2>
<p><img loading="lazy" decoding="async" width="649" height="323" src="/wp-content/uploads/2018/05/word-image-3024.png" class="wp-image-3420" srcset="/wp-content/uploads/2018/05/word-image-3024.png 649w, /wp-content/uploads/2018/05/word-image-3024-300x149.png 300w" sizes="(max-width: 649px) 100vw, 649px" /></p>
<h2>显示隐藏元素</h2>
<ol>
<li>
  show(speed,[callback])	显示
</li>
<li>
  hide(speed,[callback])	隐藏
</li>
<li>
  toggle(speed,[callback])	交替，如果当前是隐藏的，就显示。如果当前是显示的就隐藏
</li>
</ol>
<p>
  方法的参数有:fast（200毫秒）   normal（400毫秒）    slow（600号码），也可以指定任意毫秒数
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  #first{
</p>
<p>
  	width:300px;
</p>
<p>
  	height:200px;
</p>
<p>
  	background-color:#060;
</p>
<p>
  	color:#FFF;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//显示
</p>
<p>
      $(&#8216;:button:eq(0)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).show();
</p>
<p>
  		$(&#8216;#first&#8217;).show(1000);
</p>
<p>
      });
</p>
<p>
  	//隐藏
</p>
<p>
  	 $(&#8216;:button:eq(1)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).hide();
</p>
<p>
  		//$(&#8216;#first&#8217;).hide(&#8216;slow&#8217;);
</p>
<p>
  		//$(&#8216;#first&#8217;).hide(2000);
</p>
<p>
  		$(&#8216;#first&#8217;).hide(&#8216;slow&#8217;,function(){
</p>
<p>
  			$(&#8216;:button&#8217;).remove();
</p>
<p>
  		})
</p>
<p>
      });
</p>
<p>
  	//交替
</p>
<p>
  	$(&#8216;:button:eq(2)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).toggle();
</p>
<p>
  		$(&#8216;#first&#8217;).toggle(600)
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;显示&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;隐藏&#8221; /&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;交替&#8221; /&gt;
</p>
<p>
  &lt;div id=&#8221;first&#8221;&gt;
</p>
<p>
      离离原上草，一岁一枯荣。&lt;br /&gt;
</p>
<p>
      野火烧不尽，春风吹又生。&lt;br /&gt;
</p>
<p>
      远芳侵古道，晴翠接荒城。&lt;br /&gt;
</p>
<p>
      又送王孙去，萋萋满别情。&lt;br /&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<h2>向上向下</h2>
<ol>
<li>
  slideUp(speed,[callback])：向上
</li>
<li>
  slideDown(speed,[callback])：向下
</li>
<li>
  slideToggle(speed,[callback])：交替向上向下
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//向上
</p>
<p>
      $(&#8216;:button:eq(0)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).slideUp();
</p>
<p>
  		$(&#8216;#first&#8217;).slideUp(&#8216;slow&#8217;);
</p>
<p>
      });
</p>
<p>
  	//向下
</p>
<p>
  	 $(&#8216;:button:eq(1)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).slideDown();
</p>
<p>
  		//$(&#8216;#first&#8217;).slideDown(1000);
</p>
<p>
  		$(&#8216;#first&#8217;).slideDown(1000,function(){
</p>
<p>
  				alert(&#8216;执行完毕&#8217;)
</p>
<p>
  			})
</p>
<p>
      });
</p>
<p>
  	//交替
</p>
<p>
  	$(&#8216;:button:eq(2)&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;#first&#8217;).slideToggle();	//交替向上向下
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<h2>淡入淡出</h2>
<ol>
<li>
  fadeIn(speed,[callback])
</li>
<li>
  fadeOut(speed,[callback])
</li>
<li>
  fadeToggle(speed,[callback])
</li>
<li>
  fadeTo(speed,不透明度[0-1])
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//淡入
</p>
<p>
      $(&#8216;:button:eq(0)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).fadeIn();	//淡入
</p>
<p>
  		$(&#8216;#first&#8217;).fadeIn(1000);
</p>
<p>
      });
</p>
<p>
  	//淡出
</p>
<p>
  	 $(&#8216;:button:eq(1)&#8217;).click(function(e) {
</p>
<p>
          //$(&#8216;#first&#8217;).fadeOut();	//淡出
</p>
<p>
  		$(&#8216;#first&#8217;).fadeOut(1000);
</p>
<p>
      });
</p>
<p>
  	//交替
</p>
<p>
  	$(&#8216;:button:eq(2)&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;#first&#8217;).fadeToggle(1000);
</p>
<p>
      });
</p>
<p>
  	//淡出到
</p>
<p>
  	$(&#8216;:button:eq(3)&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;#first&#8217;).fadeTo(1000,0.3);	//淡出到0.3
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<h2>动画（animate）</h2>
<p>
  语法:animate(参数,运行时间)
</p>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  #first{
</p>
<p>
  	width:100px;
</p>
<p>
  	height:100px;
</p>
<p>
  	background-color:#060;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script src=&#8221;/jquery-ui/ui/jquery.ui.effect.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#first&#8217;).click(function(e) {
</p>
<p>
          $(this)
</p>
<p>
  		.animate({
</p>
<p>
  			&#8216;width&#8217;:&#8217;50px&#8217;,
</p>
<p>
  			&#8216;height&#8217;:&#8217;50px&#8217;
</p>
<p>
  		},500)
</p>
<p>
  		.animate({
</p>
<p>
  			&#8216;width&#8217;:&#8217;150px&#8217;,
</p>
<p>
  			&#8216;height&#8217;:&#8217;150px&#8217;
</p>
<p>
  		},1000)
</p>
<p>
  		.animate({
</p>
<p>
  			&#8216;margin-left&#8217;:&#8217;300px&#8217;,
</p>
<p>
  			&#8216;background-color&#8217;:&#8217;#FF0000&#8242;
</p>
<p>
  		},1000)
</p>
<p>
  		.animate({
</p>
<p>
  			&#8216;margin-left&#8217;:&#8217;250px&#8217;,
</p>
<p>
  		},50)
</p>
<p>
  		.animate({
</p>
<p>
  			&#8216;margin-left&#8217;:&#8217;300px&#8217;,
</p>
<p>
  		},50)
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div id=&#8221;first&#8221;&gt;&lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="621" height="176" src="/wp-content/uploads/2018/05/word-image-3025.png" class="wp-image-3421" srcset="/wp-content/uploads/2018/05/word-image-3025.png 621w, /wp-content/uploads/2018/05/word-image-3025-300x85.png 300w" sizes="(max-width: 621px) 100vw, 621px" /></p>
<h3>动画的例题</h3>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  *{
</p>
<p>
  	margin:0px;
</p>
<p>
  	padding:0px;
</p>
<p>
  }
</p>
<p>
  ul{
</p>
<p>
  	list-style-type:none;
</p>
<p>
  	width:702px;
</p>
<p>
  	margin:100px auto;
</p>
<p>
  }
</p>
<p>
  li{
</p>
<p>
  	width:232px;
</p>
<p>
  	height:139px;
</p>
<p>
  	float:left;
</p>
<p>
  	border:#000 solid 1px;
</p>
<p>
  	overflow:hidden;
</p>
<p>
  	cursor:pointer;
</p>
<p>
  }
</p>
<p>
  li span{
</p>
<p>
  	width:100%;
</p>
<p>
  	height:30px;
</p>
<p>
  	display:inline-block;
</p>
<p>
  	background-color:rgba(0,0,0,0.3);
</p>
<p>
  	position:relative;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;li&#8217;).hover(function(){
</p>
<p>
  		$(this).find(&#8216;span&#8217;).animate({&#8216;top&#8217;:&#8217;-30px&#8217;},500)
</p>
<p>
  	},function(){
</p>
<p>
  		$(this).find(&#8216;span&#8217;).animate({&#8216;top&#8217;:&#8217;0px&#8217;},500)
</p>
<p>
  	})
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
    &lt;li&gt;&lt;img src=&#8221;images/01.jpg&#8221; width=&#8221;232&#8243; height=&#8221;139&#8243; /&gt;&lt;span&gt;我可以认识你吗&lt;/span&gt;&lt;/li&gt;
</p>
<p>
    &lt;li&gt;&lt;img src=&#8221;images/02.jpg&#8221; width=&#8221;232&#8243; height=&#8221;139&#8243; /&gt;&lt;span&gt;其实我注意你好久了&lt;/span&gt;&lt;/li&gt;
</p>
<p>
    &lt;li&gt;&lt;img src=&#8221;images/03.jpg&#8221; width=&#8221;232&#8243; height=&#8221;139&#8243; /&gt;&lt;span&gt;我喜欢你微笑的样子&lt;/span&gt;&lt;/li&gt;
</p>
<p>
    &lt;li&gt;&lt;img src=&#8221;images/04.jpg&#8221; width=&#8221;232&#8243; height=&#8221;139&#8243; /&gt;&lt;/li&gt;
</p>
<p>
    &lt;li&gt;&lt;img src=&#8221;images/05.jpg&#8221; width=&#8221;232&#8243; height=&#8221;139&#8243; /&gt;&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p><img loading="lazy" decoding="async" width="862" height="188" src="/wp-content/uploads/2018/05/word-image-3026.png" class="wp-image-3422" srcset="/wp-content/uploads/2018/05/word-image-3026.png 862w, /wp-content/uploads/2018/05/word-image-3026-300x65.png 300w, /wp-content/uploads/2018/05/word-image-3026-768x167.png 768w" sizes="(max-width: 862px) 100vw, 862px" /></p>
<h2>jQuery中的ajax</h2>
<table>
<tr>
<td>
<p>
  getScript()，getJSON()
</p>
</td>
</tr>
<tr>
<td>
<p>
  $.get()，$.post()，$.load()
</p>
</td>
</tr>
<tr>
<td>
<p>
  $.ajax()
</p>
</td>
</tr>
</table>
<p>
  jQuery对ajax进行了封装
</p>
<h3>$.ajax()</h3>
<p>
  $.ajax()参数选项
</p>
<table>
<tr>
<td>
<p>
  url
</p>
</td>
<td>
<p>
  请求的地址
</p>
</td>
</tr>
<tr>
<td>
<p>
  type
</p>
</td>
<td>
<p>
  请求的方式  get|post
</p>
</td>
</tr>
<tr>
<td>
<p>
  data
</p>
</td>
<td>
<p>
  请求的数据
</p>
</td>
</tr>
<tr>
<td>
<p>
  dataType
</p>
</td>
<td>
<p>
  返回的数据类型：
</p>
<p>
  xml，html，script，json，jsonp，默认是text
</p>
</td>
</tr>
<tr>
<td>
<p>
  success
</p>
</td>
<td>
<p>
  function：当ajax执行成功后调用的函数
</p>
</td>
</tr>
<tr>
<td>
<p>
  error
</p>
</td>
<td>
<p>
  funtion：当ajax执行失败后调用的函数
</p>
</td>
</tr>
</table>
<p>
  例题
</p>
<p>
  HTML页面
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;#username&#8217;).blur(function(e) {
</p>
<p>
          $.ajax({
</p>
<p>
  			&#8216;url&#8217;:&#8217;./15-demo.php&#8217;,
</p>
<p>
  			&#8216;type&#8217;:&#8217;get&#8217;,
</p>
<p>
  			&#8216;data&#8217;:&#8217;username=&#8217;+encodeURIComponent($(&#8216;#username&#8217;).val()),
</p>
<p>
  			&#8216;dataType&#8217;:&#8217;text&#8217;,
</p>
<p>
  			&#8216;success&#8217;:function(data){	//成功后执行
</p>
<p>
  				alert(data)
</p>
<p>
  			},
</p>
<p>
  			&#8216;error&#8217;:function(){			//失败后执行
</p>
<p>
  				alert(&#8216;请求失败&#8217;);
</p>
<p>
  			}
</p>
<p>
  		})
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;input type=&#8221;text&#8221; id=&#8221;username&#8221; /&gt;
</p>
<p>
  PHP页面
</p>
<p>
  &lt;?php
</p>
<p>
  echo $_GET[&#8216;username&#8217;];
</p>
<p>
  运行结果
</p>
<p><img loading="lazy" decoding="async" width="806" height="69" src="/wp-content/uploads/2018/05/word-image-3027.png" class="wp-image-3423" srcset="/wp-content/uploads/2018/05/word-image-3027.png 806w, /wp-content/uploads/2018/05/word-image-3027-300x26.png 300w, /wp-content/uploads/2018/05/word-image-3027-768x66.png 768w" sizes="(max-width: 806px) 100vw, 806px" /></p>
<h3>$.get()和$.post()</h3>
<p><img loading="lazy" decoding="async" width="838" height="340" src="/wp-content/uploads/2018/05/word-image-3028.png" class="wp-image-3424" srcset="/wp-content/uploads/2018/05/word-image-3028.png 838w, /wp-content/uploads/2018/05/word-image-3028-300x122.png 300w, /wp-content/uploads/2018/05/word-image-3028-768x312.png 768w" sizes="(max-width: 838px) 100vw, 838px" /></p>
<h3>load()</h3>
<p>
  可以实现局部刷新
</p>
<p>
  17-demo1.php
</p>
<p>
  &lt;div id=&#8221;stu&#8221;&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;.pageno&#8217;).click(function(e) {
</p>
<p>
  		var pageno=$(this).text();
</p>
<p>
          //$(&#8216;#stu&#8217;).load(&#8217;17-demo2.php&#8217;,{&#8216;pageno&#8217;:pageno});		//post传递
</p>
<p>
  		//$(&#8216;#stu&#8217;).load(&#8217;17-demo2.php?pageno=&#8217;+pageno);			//get传递
</p>
<p>
  		$(&#8216;#stu&#8217;).load(&#8217;17-demo2.php?pageno=&#8217;+pageno,&#8221;,function(){
</p>
<p>
  			alert(&#8216;加载完毕&#8217;);
</p>
<p>
  		})
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;?php
</p>
<p>
  	mysql_connect(&#8216;localhost&#8217;,&#8217;root&#8217;,&#8217;root&#8217;);
</p>
<p>
  	mysql_query(&#8216;use `data`&#8217;);
</p>
<p>
  	mysql_query(&#8216;set names utf8&#8217;);
</p>
<p>
  	$rs=mysql_query(&#8216;select count(*) from stu&#8217;);
</p>
<p>
  	$rows=mysql_fetch_row($rs);
</p>
<p>
  	$pagecount=ceil($rows[0]/2);
</p>
<p>
  	for($i=1;$i&lt;=$pagecount;$i++){
</p>
<p>
  		echo &#8220;&lt;a href=&#8217;javascript:void(0)&#8217; class=&#8217;pageno&#8217;&gt;{$i}&lt;/a&gt;&amp;nbsp;&#8221;;
</p>
<p>
  	}
</p>
<p>
  ?&gt;
</p>
<p>
  17-demo2.php
</p>
<p>
  &lt;?php
</p>
<p>
  mysql_connect(&#8216;localhost&#8217;,&#8217;root&#8217;,&#8217;root&#8217;);
</p>
<p>
  mysql_query(&#8216;use `data`&#8217;);
</p>
<p>
  mysql_query(&#8216;set names utf8&#8217;);
</p>
<p>
  $pageno=$_REQUEST[&#8216;pageno&#8217;];
</p>
<p>
  $startno=($pageno-1)*2;
</p>
<p>
  $sql=&#8221;select * from stu limit $startno,2&#8243;;
</p>
<p>
  $rs=mysql_query($sql);
</p>
<p>
  ?&gt;
</p>
<p>
  &lt;table&gt;
</p>
<p>
  	&lt;tr&gt;
</p>
<p>
      	&lt;th&gt;编号&lt;/th&gt;
</p>
<p>
          &lt;th&gt;姓名&lt;/th&gt;
</p>
<p>
          &lt;th&gt;性别&lt;/th&gt;
</p>
<p>
          &lt;th&gt;年龄&lt;/th&gt;
</p>
<p>
          &lt;th&gt;地址&lt;/th&gt;
</p>
<p>
          &lt;th&gt;语文&lt;/th&gt;
</p>
<p>
          &lt;th&gt;数学&lt;/th&gt;
</p>
<p>
      &lt;/tr&gt;
</p>
<p>
      &lt;?php while($rows=mysql_fetch_assoc($rs)):?&gt;
</p>
<p>
      &lt;tr&gt;
</p>
<p>
      	&lt;td&gt;&lt;?php echo $rows[&#8216;stuNo&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;stuName&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;stuSex&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;stuAge&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;stuAddress&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;ch&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
          &lt;td&gt;&lt;?php echo $rows[&#8216;math&#8217;]?&gt;&lt;/td&gt;
</p>
<p>
      &lt;/tr&gt;
</p>
<p>
      &lt;?php endwhile;?&gt;
</p>
<p>
  &lt;/table&gt;
</p>
<p>
  运行结果
</p>
<p><img loading="lazy" decoding="async" width="387" height="146" src="/wp-content/uploads/2018/05/word-image-3029.png" class="wp-image-3426" srcset="/wp-content/uploads/2018/05/word-image-3029.png 387w, /wp-content/uploads/2018/05/word-image-3029-300x113.png 300w" sizes="(max-width: 387px) 100vw, 387px" /></p>
<h3>$.getScript()</h3>
<p>
  用来加载脚本
</p>
<p>
  写一个js脚本
</p>
<p><img loading="lazy" decoding="async" width="373" height="142" src="/wp-content/uploads/2018/05/word-image-3030.png" class="wp-image-3427" srcset="/wp-content/uploads/2018/05/word-image-3030.png 373w, /wp-content/uploads/2018/05/word-image-3030-300x114.png 300w" sizes="(max-width: 373px) 100vw, 373px" /></p>
<p>
  动态加载js
</p>
<p><img loading="lazy" decoding="async" width="1207" height="193" src="/wp-content/uploads/2018/05/word-image-3031.png" class="wp-image-3428" srcset="/wp-content/uploads/2018/05/word-image-3031.png 1207w, /wp-content/uploads/2018/05/word-image-3031-300x48.png 300w, /wp-content/uploads/2018/05/word-image-3031-768x123.png 768w, /wp-content/uploads/2018/05/word-image-3031-1024x164.png 1024w" sizes="(max-width: 1207px) 100vw, 1207px" /></p>
<h3>$.getJSON()</h3>
<p>
  获取JSON格式的数据
</p>
<ol>
<li>
  新建PHP页面
</li>
</ol>
<p>
  &lt;?php
</p>
<p>
  $stu=array(&#8216;tom&#8217;,&#8217;berry&#8217;,&#8217;ketty&#8217;);
</p>
<p>
  echo json_encode($stu);
</p>
<ol>
<li>
  新建HTML页面
</li>
</ol>
<p><img loading="lazy" decoding="async" width="859" height="342" src="/wp-content/uploads/2018/05/word-image-3032.png" class="wp-image-3429" srcset="/wp-content/uploads/2018/05/word-image-3032.png 859w, /wp-content/uploads/2018/05/word-image-3032-300x119.png 300w, /wp-content/uploads/2018/05/word-image-3032-768x306.png 768w" sizes="(max-width: 859px) 100vw, 859px" /></p>
<h3>$.get()和$.getJSON()可以跨域</h3>
<p>
  注意：$.post()不能跨域
</p>
<ol>
<li>
  在phpmyadmin.com中创建PHP页面
</li>
</ol>
<p><img loading="lazy" decoding="async" width="345" height="66" src="/wp-content/uploads/2018/05/word-image-3033.png" class="wp-image-3430" srcset="/wp-content/uploads/2018/05/word-image-3033.png 345w, /wp-content/uploads/2018/05/word-image-3033-300x57.png 300w" sizes="(max-width: 345px) 100vw, 345px" /></p>
<ol>
<li>
  在<a href="http://www.php.com/">www.php.com</a>中创建HTML页面，跨域请求
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1155" height="364" src="/wp-content/uploads/2018/05/word-image-3034.png" class="wp-image-3431" srcset="/wp-content/uploads/2018/05/word-image-3034.png 1155w, /wp-content/uploads/2018/05/word-image-3034-300x95.png 300w, /wp-content/uploads/2018/05/word-image-3034-768x242.png 768w, /wp-content/uploads/2018/05/word-image-3034-1024x323.png 1024w" sizes="(max-width: 1155px) 100vw, 1155px" /></p>
<h3>服务器返回XML格式</h3>
<ol>
<li>
  将预先准备好的XML拷贝的到站点下
</li>
<li>
  HTML页面代码如下
</li>
</ol>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	var xml;	//保存XML对象
</p>
<p>
  	//加载国家
</p>
<p>
      $.get(&#8216;./location.xml&#8217;,function(data){
</p>
<p>
  		xml=$(data);
</p>
<p>
  		xml.find(&#8216;country&#8217;).each(function(index, element) {
</p>
<p>
              $(&#8216;&lt;option&gt;&#8217;).text($(this).attr(&#8216;name&#8217;)).val($(this).attr(&#8216;id&#8217;)).appendTo($(&#8216;#country&#8217;));
</p>
<p>
          });
</p>
<p>
  	},&#8217;xml&#8217;);
</p>
<p>
  	//加载省
</p>
<p>
  	$(&#8216;#country&#8217;).change(function(e) {
</p>
<p>
  		$(&#8216;#province&#8217;).html(&#8216;&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;&#8217;);
</p>
<p>
          var id=$(this).val();
</p>
<p>
  		xml.find(&#8220;[id=&#8221;+id+&#8221;]&#8221;).children().each(function(index, element) {
</p>
<p>
              $(&#8216;&lt;option&gt;&#8217;).text($(this).attr(&#8216;name&#8217;)).val($(this).attr(&#8216;id&#8217;)).appendTo($(&#8216;#province&#8217;));
</p>
<p>
          });
</p>
<p>
      });
</p>
<p>
  	//加载市
</p>
<p>
  	$(&#8216;#province&#8217;).change(function(e) {
</p>
<p>
          $(&#8216;#city&#8217;).html(&#8216;&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;&#8217;);
</p>
<p>
  		 var id=$(this).val();
</p>
<p>
  		xml.find(&#8220;[id=&#8221;+id+&#8221;]&#8221;).children().each(function(index, element) {
</p>
<p>
              $(&#8216;&lt;option&gt;&#8217;).text($(this).attr(&#8216;name&#8217;)).val($(this).attr(&#8216;id&#8217;)).appendTo($(&#8216;#city&#8217;));
</p>
<p>
          });
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  国家：&lt;select id=&#8221;country&#8221;&gt;&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;&lt;/select&gt;
</p>
<p>
  省：&lt;select id=&#8221;province&#8221;&gt;&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;&lt;/select&gt;
</p>
<p>
  市：&lt;select id=&#8221;city&#8221;&gt;&lt;option value=&#8221;&#8221;&gt;&#8212;请选择&#8212;&lt;/option&gt;&lt;/select&gt;
</p>
<p><img loading="lazy" decoding="async" width="493" height="114" src="/wp-content/uploads/2018/05/word-image-3035.png" class="wp-image-3432" srcset="/wp-content/uploads/2018/05/word-image-3035.png 493w, /wp-content/uploads/2018/05/word-image-3035-300x69.png 300w" sizes="(max-width: 493px) 100vw, 493px" /></p>
<p>
  多学一招：实现省、市、县三级可以将数据保存在数据库，XML，JS数组/JSON。建议不要将数据放在数据库中。可以放在XML和JS中
</p>
<h2>扩展jQuery插件</h2>
<p>
  JQuery中方法有两种，一种是JQuery对象的方法，另一种是jQuery元素的方法。扩展插件就分为这两种方式来定义。
</p>
<p>
  1、扩展JQuery对象的方法
</p>
<p>
  语法：
</p>
<p>
  $.方法名=function(){
</p>
<p>
  }
</p>
<p>
  2、扩展jQuery元素的方法
</p>
<p>
  $.fn.方法名=function(){
</p>
<p>
  }
</p>
<p>
  练习
</p>
<p><img loading="lazy" decoding="async" width="978" height="418" src="/wp-content/uploads/2018/05/word-image-3036.png" class="wp-image-3433" srcset="/wp-content/uploads/2018/05/word-image-3036.png 978w, /wp-content/uploads/2018/05/word-image-3036-300x128.png 300w, /wp-content/uploads/2018/05/word-image-3036-768x328.png 768w" sizes="(max-width: 978px) 100vw, 978px" /></p>
<h2>例题：编辑表格内容</h2>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  table,td,th{
</p>
<p>
  	border:#000 solid 1px;
</p>
<p>
  	border-collapse:collapse;
</p>
<p>
  	margin:auto;
</p>
<p>
  	font-size:16px;
</p>
<p>
  	background-color:#F96
</p>
<p>
  }
</p>
<p>
  tr{
</p>
<p>
  	height:25px;
</p>
<p>
  }
</p>
<p>
  th{
</p>
<p>
  	background-color:#09F;
</p>
<p>
  	width:50%;
</p>
<p>
  }
</p>
<p>
  input{
</p>
<p>
  	border:none;
</p>
<p>
  	background-color:transparent;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
  	//添加文件框
</p>
<p>
      $(&#8216;td&#8217;).click(function(e) {
</p>
<p>
  		var value=$(this).html();	//单元格的数据
</p>
<p>
  		if($(this).find(&#8216;input&#8217;).length==0){
</p>
<p>
  			$(this).html(&#8221;);			//清空td
</p>
<p>
  			$(&#8216;&lt;input&gt;&#8217;).attr(&#8216;type&#8217;,&#8217;text&#8217;).val(value).appendTo($(this)).trigger(&#8216;focus&#8217;).trigger(&#8216;select&#8217;)
</p>
<p>
  		}
</p>
<p>
      });
</p>
<p>
  	//修改值
</p>
<p>
  	$(document).keyup(function(e) {
</p>
<p>
          if(e.keyCode==13){
</p>
<p>
  			var src=$(e.target || e.srcElement);	//获取事件发生时候当前的对象
</p>
<p>
  			if(src.is(&#8216;input&#8217;)){
</p>
<p>
  				var value=src.val();
</p>
<p>
  				src.parent().html(value);	//将值放到td中
</p>
<p>
  			}
</p>
<p>
  		}
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;table width=&#8221;400&#8243; cellpadding=&#8221;0&#8243; cellspacing=&#8221;0&#8243;&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  	&lt;th&gt;学号&lt;/th&gt;
</p>
<p>
      &lt;th&gt;姓名&lt;/th&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  	&lt;td&gt;001&lt;/td&gt;
</p>
<p>
      &lt;td&gt;张三&lt;/td&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  	&lt;td&gt;002&lt;/td&gt;
</p>
<p>
      &lt;td&gt;李四&lt;/td&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  	&lt;td&gt;003&lt;/td&gt;
</p>
<p>
      &lt;td&gt;王五&lt;/td&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;tr&gt;
</p>
<p>
  	&lt;td&gt;004&lt;/td&gt;
</p>
<p>
      &lt;td&gt;赵六&lt;/td&gt;
</p>
<p>
  &lt;/tr&gt;
</p>
<p>
  &lt;/table&gt;
</p>
<p><img loading="lazy" decoding="async" width="549" height="152" src="/wp-content/uploads/2018/05/word-image-3037.png" class="wp-image-3434" srcset="/wp-content/uploads/2018/05/word-image-3037.png 549w, /wp-content/uploads/2018/05/word-image-3037-300x83.png 300w" sizes="(max-width: 549px) 100vw, 549px" /></p>
<h2>例题：导航栏</h2>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  *{
</p>
<p>
  	font-size:12px;
</p>
<p>
  	margin:0px;
</p>
<p>
  	padding:0px;
</p>
<p>
  }
</p>
<p>
  #daohang{
</p>
<p>
  	width:300px;
</p>
<p>
  	margin:50px 0px 0px 200px;
</p>
<p>
  }
</p>
<p>
  #daohang ul{
</p>
<p>
  	list-style-type:none;
</p>
<p>
  	width:100px;
</p>
<p>
  }
</p>
<p>
  #daohang .main{
</p>
<p>
  	background:url(images24/title.gif) repeat-x;
</p>
<p>
  }
</p>
<p>
  #daohang .main a{
</p>
<p>
  	text-decoration:none;
</p>
<p>
  }
</p>
<p>
  #daohang .main ul{
</p>
<p>
  	display:none;
</p>
<p>
  	background:#FC9;
</p>
<p>
  }
</p>
<p>
  #daohang .main ul li{
</p>
<p>
  	height:25px;
</p>
<p>
  	line-height:25px;
</p>
<p>
  }
</p>
<p>
  #daohang .main&gt;span{
</p>
<p>
  	display:block;
</p>
<p>
  	height:25px;
</p>
<p>
  	line-height:25px;
</p>
<p>
  	background:url(images24/collapsed.gif) no-repeat 5px center;
</p>
<p>
  	font-size:14px;
</p>
<p>
  	padding-left:20px;
</p>
<p>
  	color:#FFF;
</p>
<p>
  	cursor:pointer;
</p>
<p>
  }
</p>
<p>
  #daohang .main .bg{
</p>
<p>
  	background-image:url(images24/expanded.gif);
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;.main&gt;span&#8217;).click(function(e) {
</p>
<p>
          $(this).toggleClass(&#8216;bg&#8217;).next().slideToggle(&#8216;slow&#8217;);
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div id=&#8221;daohang&#8221;&gt;
</p>
<p>
  &lt;ul&gt;
</p>
<p>
  	&lt;li class=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;span&gt;菜单项1&lt;/span&gt;
</p>
<p>
  		&lt;ul&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项11&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项12&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  		&lt;/ul&gt;
</p>
<p>
  	&lt;/li&gt;
</p>
<p>
  	&lt;li class=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;span&gt;菜单项2&lt;/span&gt;
</p>
<p>
  		&lt;ul&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项21&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项22&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  		&lt;/ul&gt;
</p>
<p>
  	&lt;/li&gt;
</p>
<p>
  	&lt;li class=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;span&gt;菜单项3&lt;/span&gt;
</p>
<p>
  		&lt;ul&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项31&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  			&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;子菜单项32&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  		&lt;/ul&gt;
</p>
<p>
  	&lt;/li&gt;
</p>
<p>
  &lt;/ul&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p><img loading="lazy" decoding="async" width="203" height="150" src="/wp-content/uploads/2018/05/word-image-3038.png" class="wp-image-3435" /></p>
<h2>例题：弹出对话框</h2>
<p>
  &lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  .win{
</p>
<p>
  	width:250px;
</p>
<p>
  	background-color:#D0DEF0;
</p>
<p>
  	padding:2px;
</p>
<p>
  	position:absolute;
</p>
<p>
  	display:none;
</p>
<p>
  }
</p>
<p>
  .win #title{
</p>
<p>
  	padding:4px;
</p>
<p>
  	font-size:16px;
</p>
<p>
  }
</p>
<p>
  .win #title img{
</p>
<p>
  	float:right;
</p>
<p>
  	cursor:pointer;
</p>
<p>
  }
</p>
<p>
  .win #content{
</p>
<p>
  	height:150px;
</p>
<p>
  	background-color:#FFF;
</p>
<p>
  }
</p>
<p>
  &lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;js/jquery-1.8.3.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  //定义窗口
</p>
<p>
  $.win=function(){
</p>
<p>
  	//定位窗口
</p>
<p>
  	var left=parseInt(($(window).width()-$(&#8216;#win&#8217;).width())/2+$(window).scrollLeft());
</p>
<p>
  	var top=parseInt(($(window).height()-$(&#8216;#win&#8217;).height())/2+$(window).scrollTop());
</p>
<p>
  	$(&#8216;#win&#8217;).css({&#8216;left&#8217;:left,&#8217;top&#8217;:top})
</p>
<p>
  	//给关闭按钮添加事件
</p>
<p>
  	$(&#8216;#title&#8217;).children(&#8216;img&#8217;).click(function(e) {
</p>
<p>
          $(&#8216;#win&#8217;).hide();
</p>
<p>
      });
</p>
<p>
  	return $(&#8216;#win&#8217;);
</p>
<p>
  }
</p>
<p>
  $(document).ready(function(e) {
</p>
<p>
      $(&#8216;.buy&#8217;).click(function(e) {
</p>
<p>
  		$.win().show();
</p>
<p>
      });
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;div class=&#8221;win&#8221; id=&#8221;win&#8221;&gt;
</p>
<p>
    &lt;div id=&#8221;title&#8221;&gt;&lt;img src=&#8221;images25/close.gif&#8221; alt=&#8221;关闭&#8221; width=&#8221;15&#8243; height=&#8221;15&#8243; /&gt;购物车&lt;/div&gt;
</p>
<p>
      &lt;div id=&#8221;content&#8221;&gt;
</p>
</p>
<p>
      &lt;/div&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;放入购物车&#8221; class=&#8221;buy&#8221; style=&#8221;margin:auto; display:block&#8221; /&gt;
</p>
<p>
  &lt;div style=&#8221;height:1000px; width:2000px;&#8221;&gt;&lt;/div&gt;
</p>
<p>
  &lt;input type=&#8221;button&#8221; value=&#8221;放入购物车&#8221; class=&#8221;buy&#8221; style=&#8221;margin:auto; display:block&#8221; /&gt;
</p>
<p>
  scrollLeft()：水平滚动条距左的位置
</p>
<p>
  scrollTop()：垂直滚动条距上的位置
</p>
<ol>
<li>
  能够使用bind()方法绑定事件
</li>
<li>
  能够熟练使用jQuery的常规事件绑定语法
</li>
<li>
  能够使用事件切换方法hover(),toggle()
</li>
<li>
  能够使用jQuery的基本特效方法 show(),hide(),toggle()
</li>
<li>
  能够使用jQuery的滑动特效方法 slideDown(),slideUp(),slideToggle()
</li>
<li>
  能够使用jQuery的淡入淡出特效方法
</li>
<li>
  能够理解jQuery中插件的作用
</li>
<li>
  能够制作自定义插件
</li>
<li>
  能够使用jQuery实现ajax的get请求
</li>
<li>
  能够使用jQuery实现ajax的post请求
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3411.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ajax（一）使用场景、瀑布流、请求和响应、传参、用户注册</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3339.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3339.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 09:43:15 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[传参]]></category>
		<category><![CDATA[使用场景]]></category>
		<category><![CDATA[瀑布流]]></category>
		<category><![CDATA[用户注册]]></category>
		<category><![CDATA[请求和响应]]></category>
		<guid isPermaLink="false">/?p=3339</guid>

					<description><![CDATA[Ajax简介 问题引入 在学习Ajax技术之前，我们先回顾一下之前，客户端和服务器是如何通讯的呢？我们客户端和 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1><a id="post-3339-_Toc27512"></a>Ajax简介</h1>
<h2><a id="post-3339-_Toc9508"></a>问题引入</h2>
<p>
  在学习Ajax技术之前，我们先回顾一下之前，客户端和服务器是如何通讯的呢？我们客户端和服务器端的通讯往往是在浏览器的地址栏输入一个地址后或者点击一个a链接之后，浏览器帮我们发送http请求，去找服务器要对应的数据（html文本）；然后服务器接受请求，返回对应的数据，最后浏览器在将获取的数据在页面显示（页面渲染html&#8211;显示界面）。但是往往这个过程是会导致整个页面的刷新（网速比较卡、等待时间很长），相对来说用户体验不怎么友好。
</p>
<p>
  这样的无跳转刷新，在有些时候是十分必要，例如 当用户在优酷观看VIP试看视频的过程中，试看完毕后，突然需要登录账号完成一些操作，而如果登录验证的过程必须跳转到服务器中才能完成，那么页面就会刷新，等跳转回来 又是长时间的广告，还要手动定位到之前播放的位置，给用户的访问带来极大的不便 ，因此在这里，一把会做一个弹框，做无跳转的登录。或者有的时候在看视频的时候，需要进行留言处理，也是需要进行无刷新完成的。
</p>
<p><img loading="lazy" decoding="async" width="1333" height="799" src="/wp-content/uploads/2018/05/word-image-2947.png" class="wp-image-3340" srcset="/wp-content/uploads/2018/05/word-image-2947.png 1333w, /wp-content/uploads/2018/05/word-image-2947-300x180.png 300w, /wp-content/uploads/2018/05/word-image-2947-768x460.png 768w, /wp-content/uploads/2018/05/word-image-2947-1024x614.png 1024w" sizes="(max-width: 1333px) 100vw, 1333px" /></p>
<p>
  留言
</p>
<p><img loading="lazy" decoding="async" width="1226" height="525" src="/wp-content/uploads/2018/05/word-image-2948.png" class="wp-image-3341" srcset="/wp-content/uploads/2018/05/word-image-2948.png 1226w, /wp-content/uploads/2018/05/word-image-2948-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2948-768x329.png 768w, /wp-content/uploads/2018/05/word-image-2948-1024x438.png 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /></p>
<p>
  网易云音乐
</p>
<p><img loading="lazy" decoding="async" width="1658" height="710" src="/wp-content/uploads/2018/05/word-image-2949.png" class="wp-image-3342" srcset="/wp-content/uploads/2018/05/word-image-2949.png 1658w, /wp-content/uploads/2018/05/word-image-2949-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2949-768x329.png 768w, /wp-content/uploads/2018/05/word-image-2949-1024x439.png 1024w" sizes="(max-width: 1658px) 100vw, 1658px" /></p>
<p>
  总之，很多时候用户只想更新页面的局部内容，而不是刷新整个页面，那我们是否可以在页面不刷新的情况下，还可以和服务器进行通讯，获取数据呢？
</p>
<h2>那什么是Ajax技术呢？</h2>
<h3>口语化定义-面试-日常用语</h3>
<p>
  Ajax就是一门在浏览器不刷新的情况下，还可以和服务器进行通讯，数据传输的技术（一般数据传输的格式满足两种：1. xml 相对比较少 2. json 格式很多）。
</p>
<p>
  注意1：客户端和服务器端进行通信的时候，其本质只能用文本做信息的传递，只是这个文本满足一定的人为规定的数据的格式，我们才有了XML传递或者json传递，以及jsonp传递。
</p>
<p>
  注意2：Ajax技术是数据浏览器的技术，不同的浏览器对其有不同的实现方式(w3c IE低版本678)。js也是属于浏览器的技术（浏览器一个js解析环境）。浏览器也开放了一定的接口供js去操作Ajax。
</p>
<h3>官方定义</h3>
<p>
  ajax全称 Async Javascript And XML（异步的JavaScript和XML），它是不指代某个特定的技术，主要有如下的技术一起组成：
</p>
<p>
  Async ：指AJAX能够创建异步进程的请求
</p>
<p>
  Javascript：AJAX实现的主体，就是用JS来实现的AJAX，js里面存在一个XMLHttpRequest构造函数
</p>
<p>
  XML：一种数据格式，用户AJAX请求中客户端和服务器交换数据，除此以外还有JSON
</p>
<p>
  现在所有局部刷新、无刷新操作 都叫&#8221;ajax&#8221;，它是使得JS能够同浏览器一样请求服务器，并且获取返回结果。
</p>
<p>
  论文：（最原始的定义）
</p>
<p><img loading="lazy" decoding="async" width="1196" height="786" src="/wp-content/uploads/2018/05/word-image-2950.png" class="wp-image-3343" srcset="/wp-content/uploads/2018/05/word-image-2950.png 1196w, /wp-content/uploads/2018/05/word-image-2950-300x197.png 300w, /wp-content/uploads/2018/05/word-image-2950-768x505.png 768w, /wp-content/uploads/2018/05/word-image-2950-1024x673.png 1024w" sizes="(max-width: 1196px) 100vw, 1196px" /></p>
<h3>ajax发展历史</h3>
<p>
  AJAX诞生于1998年，同期的互联网技术还有XML和CSS2.0，允许客户端发送请求到服务器的第一个应用来自于微软的Outlook Web Access开发小组，尔后称为IE4.0的一部分，并在IE5中开始运用。
</p>
<p>
  AJAX真正被广泛认识是在2005年，伴随着一些大型互联网公司的产品中开始出现ajax，例如谷歌的邮箱产品Gmail 内置了一个Gtalk的网页聊天工具，聊天的过程中需要反复不断的刷新数据 而又不能跳转 这就是引起了人们好奇 也使得原本不太受关注的ajax得到了人们的青睐。
</p>
<h2><a id="post-3339-_Toc25768"></a>Ajax常见使用场景</h2>
<ol>
<li>
  Ajax技术一般用在账户注册时候用户名和邮箱是否重复检查
</li>
<li>
  还可以实现一种按需加载的布局加载数据的效果，瀑布流布局，按需加载
</li>
<li>
  无刷新分页显示数据
</li>
<li>
  无刷新留言
</li>
<li>
  无刷新登录&#8230;..
</li>
</ol>
<p>
  例如：
</p>
<p><a href="http://reg.email.163.com/unireg/" class="broken_link">http://reg.email.163.com/unireg/</a>
</p>
<p><a href="http://36kr.com/">http://36kr.com/</a>
</p>
<p><a href="http://www.iterduo.com/">http://www.iterduo.com/</a>
</p>
<h3>网易邮箱注册</h3>
<p><img loading="lazy" decoding="async" width="1578" height="776" src="/wp-content/uploads/2018/05/word-image-2951.png" class="wp-image-3344" srcset="/wp-content/uploads/2018/05/word-image-2951.png 1578w, /wp-content/uploads/2018/05/word-image-2951-300x148.png 300w, /wp-content/uploads/2018/05/word-image-2951-768x378.png 768w, /wp-content/uploads/2018/05/word-image-2951-1024x504.png 1024w" sizes="(max-width: 1578px) 100vw, 1578px" /></p>
<h3>滚动加载</h3>
<p><img loading="lazy" decoding="async" width="1553" height="826" src="/wp-content/uploads/2018/05/word-image-2952.png" class="wp-image-3345" srcset="/wp-content/uploads/2018/05/word-image-2952.png 1553w, /wp-content/uploads/2018/05/word-image-2952-300x160.png 300w, /wp-content/uploads/2018/05/word-image-2952-768x408.png 768w, /wp-content/uploads/2018/05/word-image-2952-1024x545.png 1024w" sizes="(max-width: 1553px) 100vw, 1553px" /></p>
<h3>瀑布流布局</h3>
<p>
  文档：
</p>
<p><a href="http://www.zhangxinxu.com/wordpress/2012/03/%E5%A4%9A%E6%A0%8F%E5%88%97%E8%A1%A8%E5%8E%9F%E7%90%86%E4%B8%8B%E5%AE%9E%E7%8E%B0%E7%9A%84%E7%80%91%E5%B8%83%E6%B5%81%E5%B8%83%E5%B1%80-waterfall-layout/">http://www.zhangxinxu.com/wordpress/2012/03/%E5%A4%9A%E6%A0%8F%E5%88%97%E8%A1%A8%E5%8E%9F%E7%90%86%E4%B8%8B%E5%AE%9E%E7%8E%B0%E7%9A%84%E7%80%91%E5%B8%83%E6%B5%81%E5%B8%83%E5%B1%80-waterfall-layout/</a>
</p>
<p><img loading="lazy" decoding="async" width="1502" height="956" src="/wp-content/uploads/2018/05/word-image-2953.png" class="wp-image-3346" srcset="/wp-content/uploads/2018/05/word-image-2953.png 1502w, /wp-content/uploads/2018/05/word-image-2953-300x191.png 300w, /wp-content/uploads/2018/05/word-image-2953-768x489.png 768w, /wp-content/uploads/2018/05/word-image-2953-1024x652.png 1024w" sizes="(max-width: 1502px) 100vw, 1502px" /></p>
<p>
  下一个永远是惊喜（永远不知道下一个商品是否是最好的？）
</p>
<p>
  花瓣网：<a href="http://huaban.com/all/">http://huaban.com/all/</a>
</p>
<h2>远古时代的无刷新技术</h2>
<p>
  在没有ajax技术的时候，如何实现客户端和服务器进行无刷新的通信呢？
</p>
<p>
  答：思考，如果要完成这个操作：
</p>
<ol>
<li>
  必须要进行网络通信
</li>
<li>
  同时还可以接收到服务器端的响应
</li>
</ol>
<p>
  解决：
</p>
<p>
  答：思考在前端里面那些技术是可以发送网络请求？
</p>
<ol>
<li>
  ajax可以（不使用）
</li>
<li>
  img标签、link标签、script标签（js、执行）（都具有src 、href 属性都可以发送网络请求）
</li>
<li>
  网页嵌套iframe（页面放一个，显示出来，穿件隐身衣）【无刷新文件上传，如果是兼容低版本的IE做文件上传】（自行百度学习）
</li>
</ol>
<p>
  知道：可以使用script标签来完成网络请求？
</p>
<p>
  客户端代码：
</p>
<p><img loading="lazy" decoding="async" width="1846" height="999" src="/wp-content/uploads/2018/05/word-image-2954.png" class="wp-image-3347" srcset="/wp-content/uploads/2018/05/word-image-2954.png 1846w, /wp-content/uploads/2018/05/word-image-2954-300x162.png 300w, /wp-content/uploads/2018/05/word-image-2954-768x416.png 768w, /wp-content/uploads/2018/05/word-image-2954-1024x554.png 1024w" sizes="(max-width: 1846px) 100vw, 1846px" /></p>
<p>
  服务器端代码：
</p>
<p><img loading="lazy" decoding="async" width="1808" height="837" src="/wp-content/uploads/2018/05/word-image-2955.png" class="wp-image-3348" srcset="/wp-content/uploads/2018/05/word-image-2955.png 1808w, /wp-content/uploads/2018/05/word-image-2955-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2955-768x356.png 768w, /wp-content/uploads/2018/05/word-image-2955-1024x474.png 1024w" sizes="(max-width: 1808px) 100vw, 1808px" /></p>
<p>
  浏览器效果：
</p>
<p><img loading="lazy" decoding="async" width="882" height="638" src="/wp-content/uploads/2018/05/word-image-2956.png" class="wp-image-3349" srcset="/wp-content/uploads/2018/05/word-image-2956.png 882w, /wp-content/uploads/2018/05/word-image-2956-300x217.png 300w, /wp-content/uploads/2018/05/word-image-2956-768x556.png 768w" sizes="(max-width: 882px) 100vw, 882px" /></p>
<h1>jQuery基本使用</h1>
<h2>jQuery是什么？</h2>
<p><img loading="lazy" decoding="async" width="378" height="164" src="/wp-content/uploads/2018/05/word-image-2957.png" class="wp-image-3350" srcset="/wp-content/uploads/2018/05/word-image-2957.png 378w, /wp-content/uploads/2018/05/word-image-2957-300x130.png 300w" sizes="(max-width: 378px) 100vw, 378px" /></p>
<p>
  官网：<a href="http://jquery.com/">http://jquery.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="993" height="191" src="/wp-content/uploads/2018/05/word-image-2958.png" class="wp-image-3351" srcset="/wp-content/uploads/2018/05/word-image-2958.png 993w, /wp-content/uploads/2018/05/word-image-2958-300x58.png 300w, /wp-content/uploads/2018/05/word-image-2958-768x148.png 768w" sizes="(max-width: 993px) 100vw, 993px" /></p>
<p>
  jQuery主要是帮我们做js代码的简化操作。
</p>
<p>
  原始：
</p>
<ol>
<li>
  获取某个元素 document.getElementById(&#8216;div1&#8217;)
</li>
<li>
  获取内容 document.getElementById(&#8216;div1&#8217;).innerHTML
</li>
</ol>
<p>
  通过上面的操作既麻烦、也存在兼容性问题（低版本IE和现代浏览器不兼容）
</p>
<p>
  有人试想是否可以做一个工具库，可以简化操作。提出来jQuery（javascript + query）主要地方在于DOM元素的获取，自己进行操作（1. 获取dom元素的值 2. 设置css样式&#8230;.）
</p>
<p>
  简化：
</p>
<p>
  1. 元素获取 $(&#8216;#div1&#8217;) // 通过id获取DOM元素
</p>
<p>
  2. 获取元素的值 $(&#8216;#div1&#8217;).html() // 获取 id为div1的元素的html值
</p>
<p>
  3. 设置样式 $(&#8216;#div&#8217;).css(&#8216;color&#8217;, &#8216;red&#8217;); // 设置字体验证
</p>
<p>
  4. 设置样式类 $(&#8216;#div&#8217;).addClass(&#8216;box-red&#8217;); // 设置一个 .box-red的样式
</p>
<p>
  5. 事件绑定 $(&#8216;#btn1&#8217;).click(function(){  // 事件回调函数 });
</p>
<p>
  目前主要存在三个大的版本。
</p>
<ol>
<li>
  x系列 [工具库代码有点大，做兼容]
</li>
<li>
  x系列
</li>
<li>
  x系列
</li>
</ol>
<p>
  这三个版本的使用的方式都是一样的，但是需要注意：2.x之后的版本不在兼容IE678。
</p>
<h2>为什么要使用jQuery呢？</h2>
<p>
  从官网logo上的标语我们可以看到 write less, do more。 可以得知jQuery可以让我们用最少的代码完成最多的功能。
</p>
<ol>
<li>
  提供了强大的选择器，可以快速的选取页面上的DOM元素
</li>
<li>
  提供了众多的方法
</li>
<li>
  强大的链式操作
</li>
<li>
  对浏览器的兼容性做了处理
</li>
<li>
  &#8230;&#8230;&#8230;&#8230;
</li>
</ol>
<p><img loading="lazy" decoding="async" width="757" height="215" src="/wp-content/uploads/2018/05/word-image-2959.png" class="wp-image-3352" srcset="/wp-content/uploads/2018/05/word-image-2959.png 757w, /wp-content/uploads/2018/05/word-image-2959-300x85.png 300w" sizes="(max-width: 757px) 100vw, 757px" /></p>
<p>
  设计：less is more
</p>
<h2>选择器-内容-样式</h2>
<p>
  从jQuery的字面意思理解： jQuery = javascript + Query，由此可以看出jQuery的强大之初在于其选择器，即强大的DOM节点查询。同时需要注意的是，jQuery的选择器基本和Css的选择器一样。
</p>
<p>
  主要学习两个选择器
</p>
<ol>
<li>
  id选择器
</li>
<li>
  类选择器
</li>
</ol>
<h3>id选择器</h3>
<p>
  代码：
</p>
<p><img loading="lazy" decoding="async" width="1756" height="940" src="/wp-content/uploads/2018/05/word-image-2960.png" class="wp-image-3353" srcset="/wp-content/uploads/2018/05/word-image-2960.png 1756w, /wp-content/uploads/2018/05/word-image-2960-300x161.png 300w, /wp-content/uploads/2018/05/word-image-2960-768x411.png 768w, /wp-content/uploads/2018/05/word-image-2960-1024x548.png 1024w" sizes="(max-width: 1756px) 100vw, 1756px" /></p>
<p>
  注意：这里通过 $(&#8216;#container&#8217;) ID选择器选择DOM元素，返回值是一个对象，可以调用jQuery为对象提供的方法。
</p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="918" height="458" src="/wp-content/uploads/2018/05/word-image-2961.png" class="wp-image-3354" srcset="/wp-content/uploads/2018/05/word-image-2961.png 918w, /wp-content/uploads/2018/05/word-image-2961-300x150.png 300w, /wp-content/uploads/2018/05/word-image-2961-768x383.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></p>
<h3>类选择器</h3>
<p>
  代码：
</p>
<p><img loading="lazy" decoding="async" width="1649" height="993" src="/wp-content/uploads/2018/05/word-image-2962.png" class="wp-image-3355" srcset="/wp-content/uploads/2018/05/word-image-2962.png 1649w, /wp-content/uploads/2018/05/word-image-2962-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2962-768x462.png 768w, /wp-content/uploads/2018/05/word-image-2962-1024x617.png 1024w" sizes="(max-width: 1649px) 100vw, 1649px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="1023" height="624" src="/wp-content/uploads/2018/05/word-image-2963.png" class="wp-image-3356" srcset="/wp-content/uploads/2018/05/word-image-2963.png 1023w, /wp-content/uploads/2018/05/word-image-2963-300x183.png 300w, /wp-content/uploads/2018/05/word-image-2963-768x468.png 768w" sizes="(max-width: 1023px) 100vw, 1023px" /></p>
<h2>事件操作</h2>
<p>
  代码：
</p>
<p><img loading="lazy" decoding="async" width="1312" height="790" src="/wp-content/uploads/2018/05/word-image-2964.png" class="wp-image-3357" srcset="/wp-content/uploads/2018/05/word-image-2964.png 1312w, /wp-content/uploads/2018/05/word-image-2964-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2964-768x462.png 768w, /wp-content/uploads/2018/05/word-image-2964-1024x617.png 1024w" sizes="(max-width: 1312px) 100vw, 1312px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="958" height="370" src="/wp-content/uploads/2018/05/word-image-2965.png" class="wp-image-3358" srcset="/wp-content/uploads/2018/05/word-image-2965.png 958w, /wp-content/uploads/2018/05/word-image-2965-300x116.png 300w, /wp-content/uploads/2018/05/word-image-2965-768x297.png 768w" sizes="(max-width: 958px) 100vw, 958px" /></p>
<h1><a id="post-3339-_Toc23539"></a>ajax入门使用</h1>
<p>
  Ajax的使用，满足如下的步骤：
</p>
<ol>
<li>
  实例化一个Ajax对象
</li>
<li>
  设置一个回调函数，帮我们处理后台返回的数据，当对象的一个属性readyState == 4 就可以操作数据了
</li>
<li>
  设置一个URL地址，并设置http的请求方式（get、post）
</li>
<li>
  发送请求
</li>
</ol>
<h2><a id="post-3339-_Toc8764"></a>实操-ajax请求和响应</h2>
<p>
  在页面不刷新的请求，现在给服务器进行通信，在客户端如何显示服务器返回的数据？
</p>
<h3>a. 客户端代码，发送Ajax请求</h3>
<p><img loading="lazy" decoding="async" width="1755" height="1008" src="/wp-content/uploads/2018/05/word-image-2966.png" class="wp-image-3359" srcset="/wp-content/uploads/2018/05/word-image-2966.png 1755w, /wp-content/uploads/2018/05/word-image-2966-300x172.png 300w, /wp-content/uploads/2018/05/word-image-2966-768x441.png 768w, /wp-content/uploads/2018/05/word-image-2966-1024x588.png 1024w" sizes="(max-width: 1755px) 100vw, 1755px" /></p>
<h3>b. demo1.php后台处理请求</h3>
<p><img loading="lazy" decoding="async" width="1574" height="311" src="/wp-content/uploads/2018/05/word-image-2967.png" class="wp-image-3360" srcset="/wp-content/uploads/2018/05/word-image-2967.png 1574w, /wp-content/uploads/2018/05/word-image-2967-300x59.png 300w, /wp-content/uploads/2018/05/word-image-2967-768x152.png 768w, /wp-content/uploads/2018/05/word-image-2967-1024x202.png 1024w" sizes="(max-width: 1574px) 100vw, 1574px" /></p>
<h3>c. 效果: 当在客户端点击【按钮】的时候，会给服务器端发送请求，服务器的输出会作为响应返回给浏览器</h3>
<p><img loading="lazy" decoding="async" width="1323" height="819" src="/wp-content/uploads/2018/05/word-image-2968.png" class="wp-image-3361" srcset="/wp-content/uploads/2018/05/word-image-2968.png 1323w, /wp-content/uploads/2018/05/word-image-2968-300x186.png 300w, /wp-content/uploads/2018/05/word-image-2968-768x475.png 768w, /wp-content/uploads/2018/05/word-image-2968-1024x634.png 1024w" sizes="(max-width: 1323px) 100vw, 1323px" /></p>
<h2><a id="post-3339-_Toc8662"></a>实操-ajax传参</h2>
<p>
  传递一定的参数，让ajax接收，然后让Ajax返回一定的信息，供客户端使用。
</p>
<h3>a. 在客户端编写一定的代码，显示服务器端返回的数据</h3>
<p><img loading="lazy" decoding="async" width="1798" height="974" src="/wp-content/uploads/2018/05/word-image-2969.png" class="wp-image-3362" srcset="/wp-content/uploads/2018/05/word-image-2969.png 1798w, /wp-content/uploads/2018/05/word-image-2969-300x163.png 300w, /wp-content/uploads/2018/05/word-image-2969-768x416.png 768w, /wp-content/uploads/2018/05/word-image-2969-1024x555.png 1024w" sizes="(max-width: 1798px) 100vw, 1798px" /></p>
<h3>b. demo2.php服务器端代码</h3>
<p><img loading="lazy" decoding="async" width="1279" height="879" src="/wp-content/uploads/2018/05/word-image-2970.png" class="wp-image-3363" srcset="/wp-content/uploads/2018/05/word-image-2970.png 1279w, /wp-content/uploads/2018/05/word-image-2970-300x206.png 300w, /wp-content/uploads/2018/05/word-image-2970-768x528.png 768w, /wp-content/uploads/2018/05/word-image-2970-1024x704.png 1024w, /wp-content/uploads/2018/05/word-image-2970-220x150.png 220w" sizes="(max-width: 1279px) 100vw, 1279px" /></p>
<h3>c. 效果</h3>
<p><img loading="lazy" decoding="async" width="1107" height="745" src="/wp-content/uploads/2018/05/word-image-2971.png" class="wp-image-3364" srcset="/wp-content/uploads/2018/05/word-image-2971.png 1107w, /wp-content/uploads/2018/05/word-image-2971-300x202.png 300w, /wp-content/uploads/2018/05/word-image-2971-768x517.png 768w, /wp-content/uploads/2018/05/word-image-2971-1024x689.png 1024w" sizes="(max-width: 1107px) 100vw, 1107px" /></p>
<h2><a id="post-3339-_Toc26330"></a>实操-用户名校验</h2>
<p>
  使用Ajax完成一个用户名是否重复的检测
</p>
<h3>a. 布置一个注册的表单，给用户名input框绑定一个失去焦点的事件，当失去焦点的时候，发送Ajax请求</h3>
<p><img loading="lazy" decoding="async" width="1710" height="688" src="/wp-content/uploads/2018/05/word-image-2972.png" class="wp-image-3365" srcset="/wp-content/uploads/2018/05/word-image-2972.png 1710w, /wp-content/uploads/2018/05/word-image-2972-300x121.png 300w, /wp-content/uploads/2018/05/word-image-2972-768x309.png 768w, /wp-content/uploads/2018/05/word-image-2972-1024x412.png 1024w" sizes="(max-width: 1710px) 100vw, 1710px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="898" height="470" src="/wp-content/uploads/2018/05/word-image-2973.png" class="wp-image-3366" srcset="/wp-content/uploads/2018/05/word-image-2973.png 898w, /wp-content/uploads/2018/05/word-image-2973-300x157.png 300w, /wp-content/uploads/2018/05/word-image-2973-768x402.png 768w" sizes="(max-width: 898px) 100vw, 898px" /></p>
<h3>b. 编写js代码，完成Ajax请求</h3>
<p><img loading="lazy" decoding="async" width="1550" height="991" src="/wp-content/uploads/2018/05/word-image-2974.png" class="wp-image-3367" srcset="/wp-content/uploads/2018/05/word-image-2974.png 1550w, /wp-content/uploads/2018/05/word-image-2974-300x192.png 300w, /wp-content/uploads/2018/05/word-image-2974-768x491.png 768w, /wp-content/uploads/2018/05/word-image-2974-1024x655.png 1024w" sizes="(max-width: 1550px) 100vw, 1550px" /></p>
<h3>c. demo3.php服务器端checkuser.php处理请求</h3>
<p><img loading="lazy" decoding="async" width="1745" height="958" src="/wp-content/uploads/2018/05/word-image-2975.png" class="wp-image-3368" srcset="/wp-content/uploads/2018/05/word-image-2975.png 1745w, /wp-content/uploads/2018/05/word-image-2975-300x165.png 300w, /wp-content/uploads/2018/05/word-image-2975-768x422.png 768w, /wp-content/uploads/2018/05/word-image-2975-1024x562.png 1024w" sizes="(max-width: 1745px) 100vw, 1745px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="1402" height="851" src="/wp-content/uploads/2018/05/word-image-2976.png" class="wp-image-3369" srcset="/wp-content/uploads/2018/05/word-image-2976.png 1402w, /wp-content/uploads/2018/05/word-image-2976-300x182.png 300w, /wp-content/uploads/2018/05/word-image-2976-768x466.png 768w, /wp-content/uploads/2018/05/word-image-2976-1024x622.png 1024w" sizes="(max-width: 1402px) 100vw, 1402px" /></p>
<h1><a id="post-3339-_Toc23243"></a>Ajax之GET常见问题-面试问题</h1>
<h3>简介</h3>
<p>
  Ajax常见的问题：主要是出现在IE低版本下。
</p>
<ol>
<li>
  IE的实现方式不一样（IE下存在兼容性的问题）（到时候我们不会写原生的ajax，使用jQuery提供的ajax工具方法）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1226" height="191" src="/wp-content/uploads/2018/05/word-image-2977.png" class="wp-image-3370" srcset="/wp-content/uploads/2018/05/word-image-2977.png 1226w, /wp-content/uploads/2018/05/word-image-2977-300x47.png 300w, /wp-content/uploads/2018/05/word-image-2977-768x120.png 768w, /wp-content/uploads/2018/05/word-image-2977-1024x160.png 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /></p>
<ol>
<li>
  IE下的GET提交的缓存问题（火狐 ctrl+f5）和参数中文（编码）的问题
</li>
</ol>
<p><img loading="lazy" decoding="async" width="960" height="303" src="/wp-content/uploads/2018/05/word-image-2978.png" class="wp-image-3371" srcset="/wp-content/uploads/2018/05/word-image-2978.png 960w, /wp-content/uploads/2018/05/word-image-2978-300x95.png 300w, /wp-content/uploads/2018/05/word-image-2978-768x242.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></p>
<h3>IE6下测试XMLHttpRequest</h3>
<p>
  一般在IE6下直接使用new XMLHttpRequest是不可以的，会保错，需要我们书写兼容性的代码。
</p>
<p><img loading="lazy" decoding="async" width="1604" height="645" src="/wp-content/uploads/2018/05/word-image-2979.png" class="wp-image-3372" srcset="/wp-content/uploads/2018/05/word-image-2979.png 1604w, /wp-content/uploads/2018/05/word-image-2979-300x121.png 300w, /wp-content/uploads/2018/05/word-image-2979-768x309.png 768w, /wp-content/uploads/2018/05/word-image-2979-1024x412.png 1024w" sizes="(max-width: 1604px) 100vw, 1604px" /></p>
<p>
  网上找一个就行：
</p>
<p><img loading="lazy" decoding="async" width="1697" height="920" src="/wp-content/uploads/2018/05/word-image-2980.png" class="wp-image-3373" srcset="/wp-content/uploads/2018/05/word-image-2980.png 1697w, /wp-content/uploads/2018/05/word-image-2980-300x163.png 300w, /wp-content/uploads/2018/05/word-image-2980-768x416.png 768w, /wp-content/uploads/2018/05/word-image-2980-1024x555.png 1024w" sizes="(max-width: 1697px) 100vw, 1697px" /></p>
<p>
  通过测试可以正常
</p>
<p><img loading="lazy" decoding="async" width="1347" height="533" src="/wp-content/uploads/2018/05/word-image-2981.png" class="wp-image-3374" srcset="/wp-content/uploads/2018/05/word-image-2981.png 1347w, /wp-content/uploads/2018/05/word-image-2981-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2981-768x304.png 768w, /wp-content/uploads/2018/05/word-image-2981-1024x405.png 1024w" sizes="(max-width: 1347px) 100vw, 1347px" /></p>
<p>
  函数文件位置：
</p>
<p><img loading="lazy" decoding="async" width="775" height="290" src="/wp-content/uploads/2018/05/word-image-2982.png" class="wp-image-3375" srcset="/wp-content/uploads/2018/05/word-image-2982.png 775w, /wp-content/uploads/2018/05/word-image-2982-300x112.png 300w, /wp-content/uploads/2018/05/word-image-2982-768x287.png 768w" sizes="(max-width: 775px) 100vw, 775px" /></p>
<h3>IE6下get缓存问题</h3>
<ol>
<li>
  引入ajax.js函数，ajax函数调用
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1757" height="928" src="/wp-content/uploads/2018/05/word-image-2983.png" class="wp-image-3376" srcset="/wp-content/uploads/2018/05/word-image-2983.png 1757w, /wp-content/uploads/2018/05/word-image-2983-300x158.png 300w, /wp-content/uploads/2018/05/word-image-2983-768x406.png 768w, /wp-content/uploads/2018/05/word-image-2983-1024x541.png 1024w" sizes="(max-width: 1757px) 100vw, 1757px" /></p>
<ol>
<li>
  demo6.php服务器代码
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1097" height="962" src="/wp-content/uploads/2018/05/word-image-2984.png" class="wp-image-3377" srcset="/wp-content/uploads/2018/05/word-image-2984.png 1097w, /wp-content/uploads/2018/05/word-image-2984-300x263.png 300w, /wp-content/uploads/2018/05/word-image-2984-768x673.png 768w, /wp-content/uploads/2018/05/word-image-2984-1024x898.png 1024w" sizes="(max-width: 1097px) 100vw, 1097px" /></p>
<ol>
<li>
  在IE下存在一个缓存的问题，一般如果URL地址不变的情况下，IE是不会在发送http请求
</li>
</ol>
<p>
  一般解决方式：1. 在URL地址后面加一个随机数 2. 或者是加上一个时间戳
</p>
<p>
  代码：
</p>
<p><img loading="lazy" decoding="async" width="1792" height="958" src="/wp-content/uploads/2018/05/word-image-2985.png" class="wp-image-3378" srcset="/wp-content/uploads/2018/05/word-image-2985.png 1792w, /wp-content/uploads/2018/05/word-image-2985-300x160.png 300w, /wp-content/uploads/2018/05/word-image-2985-768x411.png 768w, /wp-content/uploads/2018/05/word-image-2985-1024x547.png 1024w" sizes="(max-width: 1792px) 100vw, 1792px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="1253" height="482" src="/wp-content/uploads/2018/05/word-image-2986.png" class="wp-image-3379" srcset="/wp-content/uploads/2018/05/word-image-2986.png 1253w, /wp-content/uploads/2018/05/word-image-2986-300x115.png 300w, /wp-content/uploads/2018/05/word-image-2986-768x295.png 768w, /wp-content/uploads/2018/05/word-image-2986-1024x394.png 1024w" sizes="(max-width: 1253px) 100vw, 1253px" /></p>
<h3>IE6下get中文问题</h3>
<p>
  1. 中文的问题（注意：在IE6下不能得到正常的传递）
</p>
<p>
  解决：对中文的字符进行编码后进行传输
</p>
<p>
  encodeURIComponent函数
</p>
<p><img loading="lazy" decoding="async" width="960" height="303" src="/wp-content/uploads/2018/05/word-image-2987.png" class="wp-image-3380" srcset="/wp-content/uploads/2018/05/word-image-2987.png 960w, /wp-content/uploads/2018/05/word-image-2987-300x95.png 300w, /wp-content/uploads/2018/05/word-image-2987-768x242.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></p>
<ol>
<li>
  客户端代码，引入ajax.js，调用ajax函数
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1890" height="984" src="/wp-content/uploads/2018/05/word-image-2988.png" class="wp-image-3381" srcset="/wp-content/uploads/2018/05/word-image-2988.png 1890w, /wp-content/uploads/2018/05/word-image-2988-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2988-768x400.png 768w, /wp-content/uploads/2018/05/word-image-2988-1024x533.png 1024w" sizes="(max-width: 1890px) 100vw, 1890px" /></p>
<ol>
<li>
  demo7.php服务器端代码
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1813" height="968" src="/wp-content/uploads/2018/05/word-image-2989.png" class="wp-image-3382" srcset="/wp-content/uploads/2018/05/word-image-2989.png 1813w, /wp-content/uploads/2018/05/word-image-2989-300x160.png 300w, /wp-content/uploads/2018/05/word-image-2989-768x410.png 768w, /wp-content/uploads/2018/05/word-image-2989-1024x547.png 1024w" sizes="(max-width: 1813px) 100vw, 1813px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1291" height="543" src="/wp-content/uploads/2018/05/word-image-2990.png" class="wp-image-3383" srcset="/wp-content/uploads/2018/05/word-image-2990.png 1291w, /wp-content/uploads/2018/05/word-image-2990-300x126.png 300w, /wp-content/uploads/2018/05/word-image-2990-768x323.png 768w, /wp-content/uploads/2018/05/word-image-2990-1024x431.png 1024w" sizes="(max-width: 1291px) 100vw, 1291px" /></p>
<h1><a id="post-3339-_Toc19118"></a>Ajax之POST常见问题</h1>
<p>
  如何使用Ajax完成post提交？
</p>
<p>
  答：在使用Ajax做post提交的时候，需要注意设置一个请求头的概念，并且这个请求头必须在open方法之后，send方法之前设置。POST请求头的设置无论是w3c还是IE都需要设置，并且在IE下中文也不用进行编码。
</p>
<p>
  文档：<a href="http://www.w3school.com.cn/tags/att_form_enctype.asp">http://www.w3school.com.cn/tags/att_form_enctype.asp</a>
</p>
<p>
  设置传输编码：application/x-www-form-urlencoded（表单做post提交 encrypt）
</p>
<p><img loading="lazy" decoding="async" width="1385" height="262" src="/wp-content/uploads/2018/05/word-image-2991.png" class="wp-image-3384" srcset="/wp-content/uploads/2018/05/word-image-2991.png 1385w, /wp-content/uploads/2018/05/word-image-2991-300x57.png 300w, /wp-content/uploads/2018/05/word-image-2991-768x145.png 768w, /wp-content/uploads/2018/05/word-image-2991-1024x194.png 1024w" sizes="(max-width: 1385px) 100vw, 1385px" /></p>
<p>
  1. 在Ajax对象的open方法之后设置请求头即可，并且post提交的数据要写成一个字符串作为参数传递个send方法。
</p>
<p><img loading="lazy" decoding="async" width="771" height="331" src="/wp-content/uploads/2018/05/word-image-2992.png" class="wp-image-3385" srcset="/wp-content/uploads/2018/05/word-image-2992.png 771w, /wp-content/uploads/2018/05/word-image-2992-300x129.png 300w, /wp-content/uploads/2018/05/word-image-2992-768x330.png 768w" sizes="(max-width: 771px) 100vw, 771px" /></p>
<h1><a id="post-3339-_Toc6607"></a>Ajax手册学习</h1>
<h2><a id="post-3339-_Toc2626"></a>手册解释</h2>
<p>
  手册位置：
</p>
<p><img loading="lazy" decoding="async" width="756" height="348" src="/wp-content/uploads/2018/05/word-image-2993.png" class="wp-image-3386" srcset="/wp-content/uploads/2018/05/word-image-2993.png 756w, /wp-content/uploads/2018/05/word-image-2993-300x138.png 300w" sizes="(max-width: 756px) 100vw, 756px" /></p>
<p>
  手册参数：
</p>
<p><img loading="lazy" decoding="async" width="1105" height="595" src="/wp-content/uploads/2018/05/word-image-2994.png" class="wp-image-3387" srcset="/wp-content/uploads/2018/05/word-image-2994.png 1105w, /wp-content/uploads/2018/05/word-image-2994-300x162.png 300w, /wp-content/uploads/2018/05/word-image-2994-768x414.png 768w, /wp-content/uploads/2018/05/word-image-2994-1024x551.png 1024w" sizes="(max-width: 1105px) 100vw, 1105px" /></p>
<p>
  这个手册里面只要了解三个属性，两个常见方法。
</p>
<h2><a id="post-3339-_Toc12504"></a>Ajax状态变化 </h2>
<p>
  在使用ajax和服务器进行通信过程中，ajax的状态会产生一个变化，例如ajax对象产生，ajax发送请求，ajax对象成功获取服务器的响应&#8230;.. 我们可以通过该对象 readyState 属性进行捕获，属性值有0-4 五个值，四种变化。我们可以捕获其变化，当状态变化的时候， onreadystatechange 对应的回调函数会自动进行触发。
</p>
<p>
  1. 当我们使用Ajax去和服务器进行交互的过程，Ajax对象的状态是会发生变化的，我们可以使用xhr.readyState属性感知其变化。
</p>
<p><img loading="lazy" decoding="async" width="1555" height="970" src="/wp-content/uploads/2018/05/word-image-2995.png" class="wp-image-3388" srcset="/wp-content/uploads/2018/05/word-image-2995.png 1555w, /wp-content/uploads/2018/05/word-image-2995-300x187.png 300w, /wp-content/uploads/2018/05/word-image-2995-768x479.png 768w, /wp-content/uploads/2018/05/word-image-2995-1024x639.png 1024w" sizes="(max-width: 1555px) 100vw, 1555px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1021" height="762" src="/wp-content/uploads/2018/05/word-image-2996.png" class="wp-image-3389" srcset="/wp-content/uploads/2018/05/word-image-2996.png 1021w, /wp-content/uploads/2018/05/word-image-2996-300x224.png 300w, /wp-content/uploads/2018/05/word-image-2996-768x573.png 768w" sizes="(max-width: 1021px) 100vw, 1021px" /></p>
<ol>
<li>
  总结：在使用xhr.readyState感知变化的过程中，可以看到从1变到4。在状态变为4的时候，我们可以使用xhr.responseText属性获取服务器返回的数据信息
</li>
</ol>
<p>
  客户端代码
</p>
<p><img loading="lazy" decoding="async" width="1667" height="1003" src="/wp-content/uploads/2018/05/word-image-2997.png" class="wp-image-3390" srcset="/wp-content/uploads/2018/05/word-image-2997.png 1667w, /wp-content/uploads/2018/05/word-image-2997-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2997-768x462.png 768w, /wp-content/uploads/2018/05/word-image-2997-1024x616.png 1024w" sizes="(max-width: 1667px) 100vw, 1667px" /></p>
<p>
  demo9.php服务器端代码：
</p>
<p><img loading="lazy" decoding="async" width="1042" height="906" src="/wp-content/uploads/2018/05/word-image-2998.png" class="wp-image-3391" srcset="/wp-content/uploads/2018/05/word-image-2998.png 1042w, /wp-content/uploads/2018/05/word-image-2998-300x261.png 300w, /wp-content/uploads/2018/05/word-image-2998-768x668.png 768w, /wp-content/uploads/2018/05/word-image-2998-1024x890.png 1024w" sizes="(max-width: 1042px) 100vw, 1042px" /></p>
<p>
  浏览器效果
</p>
<p><img loading="lazy" decoding="async" width="894" height="567" src="/wp-content/uploads/2018/05/word-image-2999.png" class="wp-image-3392" srcset="/wp-content/uploads/2018/05/word-image-2999.png 894w, /wp-content/uploads/2018/05/word-image-2999-300x190.png 300w, /wp-content/uploads/2018/05/word-image-2999-768x487.png 768w" sizes="(max-width: 894px) 100vw, 894px" /></p>
<p>
  注意：
</p>
<ol>
<li>
  在下面的回调处理函数里面的 xhr.readyState属性的值可以从 0  到 4 ，存在有4种变化，5个状态。
</li>
<li>
  只有当状态成为4的时候，才可以获取到服务器返回的数据，服务器返回的数据会在对象的responseText属性或者是responseXML属性，如果请求的地址是一个XML文件，则会存放到该属性，其他的都是放到responseText属性里面。
</li>
</ol>
<p>
  xhr.onreadystatechange = function(){
</p>
<p>
  	// 服务器的数据何时可以正常的返回
</p>
<p>
  	console.log( xhr.readyState );
</p>
<p>
  }
</p>
<h2><a id="post-3339-_Toc24824"></a>服务器返回的数据的概念</h2>
<p>
  什么叫服务器返回的数据？
</p>
<p>
  答：在ajax和服务器进行通信过程中，服务器肯定要返回点数据给ajax对象，那么主要存在以下四种返回数据。
</p>
<h3>PHP脚本返回HTML</h3>
<ol>
<li>
  如果是请求的一个php文件URL地址（data.php），该脚本里面可以直接包含一段html代码，代表服务器返回的数据
</li>
</ol>
<p>
  客户端
</p>
<p><img loading="lazy" decoding="async" width="1640" height="1001" src="/wp-content/uploads/2018/05/word-image-3000.png" class="wp-image-3393" srcset="/wp-content/uploads/2018/05/word-image-3000.png 1640w, /wp-content/uploads/2018/05/word-image-3000-300x183.png 300w, /wp-content/uploads/2018/05/word-image-3000-768x469.png 768w, /wp-content/uploads/2018/05/word-image-3000-1024x625.png 1024w" sizes="(max-width: 1640px) 100vw, 1640px" /></p>
<p>
  demo10.php 服务端脚本
</p>
<p><img loading="lazy" decoding="async" width="1202" height="695" src="/wp-content/uploads/2018/05/word-image-3001.png" class="wp-image-3394" srcset="/wp-content/uploads/2018/05/word-image-3001.png 1202w, /wp-content/uploads/2018/05/word-image-3001-300x173.png 300w, /wp-content/uploads/2018/05/word-image-3001-768x444.png 768w, /wp-content/uploads/2018/05/word-image-3001-1024x592.png 1024w" sizes="(max-width: 1202px) 100vw, 1202px" /></p>
<p>
  浏览器效果
</p>
<p><img loading="lazy" decoding="async" width="1220" height="870" src="/wp-content/uploads/2018/05/word-image-3002.png" class="wp-image-3395" srcset="/wp-content/uploads/2018/05/word-image-3002.png 1220w, /wp-content/uploads/2018/05/word-image-3002-300x214.png 300w, /wp-content/uploads/2018/05/word-image-3002-768x548.png 768w, /wp-content/uploads/2018/05/word-image-3002-1024x730.png 1024w" sizes="(max-width: 1220px) 100vw, 1220px" /></p>
<h3>PHP脚本输出变量数据</h3>
<ol>
<li>
  如果是请求的一个php文件URL地址，脚本里面存在输出内容（echo 、var_dump 、print_r），代表服务器返回的数据
</li>
</ol>
<p>
  客户端
</p>
<p><img loading="lazy" decoding="async" width="1494" height="953" src="/wp-content/uploads/2018/05/word-image-3003.png" class="wp-image-3396" srcset="/wp-content/uploads/2018/05/word-image-3003.png 1494w, /wp-content/uploads/2018/05/word-image-3003-300x191.png 300w, /wp-content/uploads/2018/05/word-image-3003-768x490.png 768w, /wp-content/uploads/2018/05/word-image-3003-1024x653.png 1024w" sizes="(max-width: 1494px) 100vw, 1494px" /></p>
<p>
  demo11.php 服务端脚本
</p>
<p><img loading="lazy" decoding="async" width="1834" height="742" src="/wp-content/uploads/2018/05/word-image-3004.png" class="wp-image-3397" srcset="/wp-content/uploads/2018/05/word-image-3004.png 1834w, /wp-content/uploads/2018/05/word-image-3004-300x121.png 300w, /wp-content/uploads/2018/05/word-image-3004-768x311.png 768w, /wp-content/uploads/2018/05/word-image-3004-1024x414.png 1024w" sizes="(max-width: 1834px) 100vw, 1834px" /></p>
<p>
  浏览器效果
</p>
<p><img loading="lazy" decoding="async" width="1010" height="717" src="/wp-content/uploads/2018/05/word-image-3005.png" class="wp-image-3398" srcset="/wp-content/uploads/2018/05/word-image-3005.png 1010w, /wp-content/uploads/2018/05/word-image-3005-300x213.png 300w, /wp-content/uploads/2018/05/word-image-3005-768x545.png 768w" sizes="(max-width: 1010px) 100vw, 1010px" /></p>
<h3>请求文本文件</h3>
<ol>
<li>
  如果请求的是一个其他类型的文件URL地址，一般是文本文件，以如下格式结尾的文件.txt 、.html 、.htm 、.xhtml、 .shtml、json，里面的内容代表服务器返回的数据
</li>
</ol>
<p>
  客户端
</p>
<p><img loading="lazy" decoding="async" width="1779" height="1000" src="/wp-content/uploads/2018/05/word-image-3006.png" class="wp-image-3399" srcset="/wp-content/uploads/2018/05/word-image-3006.png 1779w, /wp-content/uploads/2018/05/word-image-3006-300x169.png 300w, /wp-content/uploads/2018/05/word-image-3006-768x432.png 768w, /wp-content/uploads/2018/05/word-image-3006-1024x576.png 1024w" sizes="(max-width: 1779px) 100vw, 1779px" /><br />
<img loading="lazy" decoding="async" width="1836" height="803" src="/wp-content/uploads/2018/05/word-image-3007.png" class="wp-image-3400" srcset="/wp-content/uploads/2018/05/word-image-3007.png 1836w, /wp-content/uploads/2018/05/word-image-3007-300x131.png 300w, /wp-content/uploads/2018/05/word-image-3007-768x336.png 768w, /wp-content/uploads/2018/05/word-image-3007-1024x448.png 1024w" sizes="(max-width: 1836px) 100vw, 1836px" /></p>
<p>
  top250.json 服务端脚本
</p>
<p><img loading="lazy" decoding="async" width="1566" height="993" src="/wp-content/uploads/2018/05/word-image-3008.png" class="wp-image-3401" srcset="/wp-content/uploads/2018/05/word-image-3008.png 1566w, /wp-content/uploads/2018/05/word-image-3008-300x190.png 300w, /wp-content/uploads/2018/05/word-image-3008-768x487.png 768w, /wp-content/uploads/2018/05/word-image-3008-1024x649.png 1024w" sizes="(max-width: 1566px) 100vw, 1566px" /></p>
<p>
  浏览器效果
</p>
<p><img loading="lazy" decoding="async" width="1408" height="696" src="/wp-content/uploads/2018/05/word-image-3009.png" class="wp-image-3402" srcset="/wp-content/uploads/2018/05/word-image-3009.png 1408w, /wp-content/uploads/2018/05/word-image-3009-300x148.png 300w, /wp-content/uploads/2018/05/word-image-3009-768x380.png 768w, /wp-content/uploads/2018/05/word-image-3009-1024x506.png 1024w" sizes="(max-width: 1408px) 100vw, 1408px" /></p>
<h3>返回xml格式数据</h3>
<ol>
<li>
  还可以请求一个XML文件URL地址，但是需要注意：这个时候接受服务器返回的数据，一般使用responseXML属性获取，是一个文档对象。
</li>
</ol>
<p>
  客户端
</p>
<p><img loading="lazy" decoding="async" width="1821" height="1009" src="/wp-content/uploads/2018/05/word-image-3010.png" class="wp-image-3403" srcset="/wp-content/uploads/2018/05/word-image-3010.png 1821w, /wp-content/uploads/2018/05/word-image-3010-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3010-768x426.png 768w, /wp-content/uploads/2018/05/word-image-3010-1024x567.png 1024w" sizes="(max-width: 1821px) 100vw, 1821px" /></p>
<p>
  xml.xml服务器端代码
</p>
<p><img loading="lazy" decoding="async" width="1245" height="980" src="/wp-content/uploads/2018/05/word-image-3011.png" class="wp-image-3404" srcset="/wp-content/uploads/2018/05/word-image-3011.png 1245w, /wp-content/uploads/2018/05/word-image-3011-300x236.png 300w, /wp-content/uploads/2018/05/word-image-3011-768x605.png 768w, /wp-content/uploads/2018/05/word-image-3011-1024x806.png 1024w" sizes="(max-width: 1245px) 100vw, 1245px" /></p>
<p>
  浏览器效果
</p>
<p><img loading="lazy" decoding="async" width="791" height="506" src="/wp-content/uploads/2018/05/word-image-3012.png" class="wp-image-3405" srcset="/wp-content/uploads/2018/05/word-image-3012.png 791w, /wp-content/uploads/2018/05/word-image-3012-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3012-768x491.png 768w" sizes="(max-width: 791px) 100vw, 791px" /></p>
<p>
  注意：现在一般来说我们很少使用xml（难用，但是底层的效率还是很高，有些业务，是必须使用xml，银行金钱相关的业务，接口必须使用xml，xml存在DTD进行文档类型约束）作为数据传输格式（以前没有出现json的时候，都是使用的xml，但是现在基本所有的 项目的数据交互格式都是使用json，因为多种语言都对json进行支持，可以在多种语言之间会使用json作为官方的数据交互媒介 PHP支持json c语言  java支持json  js支持json）。
</p>
<h1><a id="post-3339-_Toc481"></a>Ajax案例-会员模块-curd-作业</h1>
<h2><a id="post-3339-_Toc29820"></a>功能需求</h2>
<ol>
<li>
  在添加的时候做用户名唯一性检查
</li>
</ol>
<p><img loading="lazy" decoding="async" width="801" height="534" src="/wp-content/uploads/2018/05/word-image-3013.png" class="wp-image-3406" srcset="/wp-content/uploads/2018/05/word-image-3013.png 801w, /wp-content/uploads/2018/05/word-image-3013-300x200.png 300w, /wp-content/uploads/2018/05/word-image-3013-768x512.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<ol>
<li>
  做数据展示做一个无刷新分页
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1599" height="812" src="/wp-content/uploads/2018/05/word-image-3014.png" class="wp-image-3407" srcset="/wp-content/uploads/2018/05/word-image-3014.png 1599w, /wp-content/uploads/2018/05/word-image-3014-300x152.png 300w, /wp-content/uploads/2018/05/word-image-3014-768x390.png 768w, /wp-content/uploads/2018/05/word-image-3014-1024x520.png 1024w" sizes="(max-width: 1599px) 100vw, 1599px" /></p>
<ol>
<li>
  做删除的时候做Ajax无刷新删除 + 事件代理完成、事件委托
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1622" height="790" src="/wp-content/uploads/2018/05/word-image-3015.png" class="wp-image-3408" srcset="/wp-content/uploads/2018/05/word-image-3015.png 1622w, /wp-content/uploads/2018/05/word-image-3015-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3015-768x374.png 768w, /wp-content/uploads/2018/05/word-image-3015-1024x499.png 1024w" sizes="(max-width: 1622px) 100vw, 1622px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3339.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ajax（二）用户注册验证、无刷新分页、underscore工具库、json、跨域、Ajax文件上传</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3244.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3244.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 09:35:43 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[Ajax文件上传]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[underscore工具库]]></category>
		<category><![CDATA[无刷新分页]]></category>
		<category><![CDATA[用户注册验证]]></category>
		<category><![CDATA[跨域]]></category>
		<guid isPermaLink="false">/?p=3244</guid>

					<description><![CDATA[Ajax案例-会员模块-curd-作业 功能需求 在添加的时候做用户名唯一性检查 做数据展示做一个无刷新分页（ [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1><a id="post-3244-_Toc481"></a><a id="post-3244-_Toc7787"></a>Ajax案例-会员模块-curd-作业</h1>
<h2><a id="post-3244-_Toc29820"></a>功能需求</h2>
<ol>
<li>
  在添加的时候做用户名唯一性检查
</li>
</ol>
<p><img loading="lazy" decoding="async" width="801" height="534" src="/wp-content/uploads/2018/05/word-image-2855.png" class="wp-image-3245" srcset="/wp-content/uploads/2018/05/word-image-2855.png 801w, /wp-content/uploads/2018/05/word-image-2855-300x200.png 300w, /wp-content/uploads/2018/05/word-image-2855-768x512.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<ol>
<li>
  做数据展示做一个无刷新分页（分页插件 layUI 闲心）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1599" height="812" src="/wp-content/uploads/2018/05/word-image-2856.png" class="wp-image-3246" srcset="/wp-content/uploads/2018/05/word-image-2856.png 1599w, /wp-content/uploads/2018/05/word-image-2856-300x152.png 300w, /wp-content/uploads/2018/05/word-image-2856-768x390.png 768w, /wp-content/uploads/2018/05/word-image-2856-1024x520.png 1024w" sizes="(max-width: 1599px) 100vw, 1599px" /></p>
<ol>
<li>
  做删除的时候做Ajax无刷新删除 + 事件代理完成、事件委托
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1622" height="790" src="/wp-content/uploads/2018/05/word-image-2857.png" class="wp-image-3247" srcset="/wp-content/uploads/2018/05/word-image-2857.png 1622w, /wp-content/uploads/2018/05/word-image-2857-300x146.png 300w, /wp-content/uploads/2018/05/word-image-2857-768x374.png 768w, /wp-content/uploads/2018/05/word-image-2857-1024x499.png 1024w" sizes="(max-width: 1622px) 100vw, 1622px" /></p>
<h2>实操-添加</h2>
<h3>用户注册-唯一性检验</h3>
<ol>
<li>
  编写一个user.html文件，展示一个注册表单
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1810" height="826" src="/wp-content/uploads/2018/05/word-image-2858.png" class="wp-image-3248" srcset="/wp-content/uploads/2018/05/word-image-2858.png 1810w, /wp-content/uploads/2018/05/word-image-2858-300x137.png 300w, /wp-content/uploads/2018/05/word-image-2858-768x350.png 768w, /wp-content/uploads/2018/05/word-image-2858-1024x467.png 1024w" sizes="(max-width: 1810px) 100vw, 1810px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1633" height="500" src="/wp-content/uploads/2018/05/word-image-2859.png" class="wp-image-3249" srcset="/wp-content/uploads/2018/05/word-image-2859.png 1633w, /wp-content/uploads/2018/05/word-image-2859-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2859-768x235.png 768w, /wp-content/uploads/2018/05/word-image-2859-1024x314.png 1024w" sizes="(max-width: 1633px) 100vw, 1633px" /></p>
<ol>
<li>
  在user.html页面编写js代码进行校验用户信息，如果前台校验成功，使用ajax发送网络请求，进行用户唯一性处理
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1240" height="968" src="/wp-content/uploads/2018/05/word-image-2860.png" class="wp-image-3250" srcset="/wp-content/uploads/2018/05/word-image-2860.png 1240w, /wp-content/uploads/2018/05/word-image-2860-300x234.png 300w, /wp-content/uploads/2018/05/word-image-2860-768x600.png 768w, /wp-content/uploads/2018/05/word-image-2860-1024x799.png 1024w" sizes="(max-width: 1240px) 100vw, 1240px" /></p>
<p>
  注意：这里的swal函数使用的是sweetalert插件提供的。
</p>
<ol>
<li>
  在后台编写一个checkUser.php文件完成用户唯一性校验，可以注册返回1，不可以注册返回0
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1648" height="990" src="/wp-content/uploads/2018/05/word-image-2861.png" class="wp-image-3251" srcset="/wp-content/uploads/2018/05/word-image-2861.png 1648w, /wp-content/uploads/2018/05/word-image-2861-300x180.png 300w, /wp-content/uploads/2018/05/word-image-2861-768x461.png 768w, /wp-content/uploads/2018/05/word-image-2861-1024x615.png 1024w" sizes="(max-width: 1648px) 100vw, 1648px" /></p>
<h3>用户注册-添加入库</h3>
<p>
  1. 编写一个user.html文件，展示一个注册表单
</p>
<p><img loading="lazy" decoding="async" width="1810" height="826" src="/wp-content/uploads/2018/05/word-image-2862.png" class="wp-image-3253" srcset="/wp-content/uploads/2018/05/word-image-2862.png 1810w, /wp-content/uploads/2018/05/word-image-2862-300x137.png 300w, /wp-content/uploads/2018/05/word-image-2862-768x350.png 768w, /wp-content/uploads/2018/05/word-image-2862-1024x467.png 1024w" sizes="(max-width: 1810px) 100vw, 1810px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1633" height="500" src="/wp-content/uploads/2018/05/word-image-2863.png" class="wp-image-3254" srcset="/wp-content/uploads/2018/05/word-image-2863.png 1633w, /wp-content/uploads/2018/05/word-image-2863-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2863-768x235.png 768w, /wp-content/uploads/2018/05/word-image-2863-1024x314.png 1024w" sizes="(max-width: 1633px) 100vw, 1633px" /></p>
<ol>
<li>
  在user.html页面编写js代码进行校验用户信息，如果前台校验成功，使用ajax发送网络请求，进行用户入库操作
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1745" height="802" src="/wp-content/uploads/2018/05/word-image-2864.png" class="wp-image-3255" srcset="/wp-content/uploads/2018/05/word-image-2864.png 1745w, /wp-content/uploads/2018/05/word-image-2864-300x138.png 300w, /wp-content/uploads/2018/05/word-image-2864-768x353.png 768w, /wp-content/uploads/2018/05/word-image-2864-1024x471.png 1024w" sizes="(max-width: 1745px) 100vw, 1745px" /><br />
<img loading="lazy" decoding="async" width="1771" height="337" src="/wp-content/uploads/2018/05/word-image-2865.png" class="wp-image-3256" srcset="/wp-content/uploads/2018/05/word-image-2865.png 1771w, /wp-content/uploads/2018/05/word-image-2865-300x57.png 300w, /wp-content/uploads/2018/05/word-image-2865-768x146.png 768w, /wp-content/uploads/2018/05/word-image-2865-1024x195.png 1024w" sizes="(max-width: 1771px) 100vw, 1771px" /></p>
<p>
  注意：这里的swal函数使用的是sweetalert插件提供的。
</p>
<p>
  3. 在后台编写一个addkUser.php文件完成用户入库操作，成功返回1，失败返回0
</p>
<p><img loading="lazy" decoding="async" width="1578" height="821" src="/wp-content/uploads/2018/05/word-image-2866.png" class="wp-image-3257" srcset="/wp-content/uploads/2018/05/word-image-2866.png 1578w, /wp-content/uploads/2018/05/word-image-2866-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2866-768x400.png 768w, /wp-content/uploads/2018/05/word-image-2866-1024x533.png 1024w" sizes="(max-width: 1578px) 100vw, 1578px" /></p>
<h3>sweetalert插件</h3>
<p>
  相关网站：
</p>
<p><a href="http://www.bootcdn.cn/sweetalert/">http://www.bootcdn.cn/sweetalert/</a>
</p>
<p><a href="http://mishengqiang.com/sweetalert/" class="broken_link">http://mishengqiang.com/sweetalert/</a>
</p>
<ol>
<li>
  在bootcdn网站查询sweetalert插件
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1714" height="793" src="/wp-content/uploads/2018/05/word-image-2867.png" class="wp-image-3258" srcset="/wp-content/uploads/2018/05/word-image-2867.png 1714w, /wp-content/uploads/2018/05/word-image-2867-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2867-768x355.png 768w, /wp-content/uploads/2018/05/word-image-2867-1024x474.png 1024w" sizes="(max-width: 1714px) 100vw, 1714px" /></p>
<ol>
<li>
  自己的页面引入对应的css和js资源文件，调用 swal 函数进行测试
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1228" height="478" src="/wp-content/uploads/2018/05/word-image-2868.png" class="wp-image-3259" srcset="/wp-content/uploads/2018/05/word-image-2868.png 1228w, /wp-content/uploads/2018/05/word-image-2868-300x117.png 300w, /wp-content/uploads/2018/05/word-image-2868-768x299.png 768w, /wp-content/uploads/2018/05/word-image-2868-1024x399.png 1024w" sizes="(max-width: 1228px) 100vw, 1228px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="1461" height="732" src="/wp-content/uploads/2018/05/word-image-2869.png" class="wp-image-3260" srcset="/wp-content/uploads/2018/05/word-image-2869.png 1461w, /wp-content/uploads/2018/05/word-image-2869-300x150.png 300w, /wp-content/uploads/2018/05/word-image-2869-768x385.png 768w, /wp-content/uploads/2018/05/word-image-2869-1024x513.png 1024w" sizes="(max-width: 1461px) 100vw, 1461px" /></p>
<h2>实操-用户展示</h2>
<h3>用户的展示-无刷新分页</h3>
<p>
  昨天使用了一个叫做layUI提供的一个layPage的分页插件。
</p>
<p>
  功能需求分析：
</p>
<p><img loading="lazy" decoding="async" width="1524" height="827" src="/wp-content/uploads/2018/05/word-image-2870.png" class="wp-image-3261" srcset="/wp-content/uploads/2018/05/word-image-2870.png 1524w, /wp-content/uploads/2018/05/word-image-2870-300x163.png 300w, /wp-content/uploads/2018/05/word-image-2870-768x417.png 768w, /wp-content/uploads/2018/05/word-image-2870-1024x556.png 1024w" sizes="(max-width: 1524px) 100vw, 1524px" /></p>
<p>
  代码实现：
</p>
<ol>
<li>
  定义一个ulst.php展示用户的列表，默认获取显示第一页的数据
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1728" height="826" src="/wp-content/uploads/2018/05/word-image-2871.png" class="wp-image-3262" srcset="/wp-content/uploads/2018/05/word-image-2871.png 1728w, /wp-content/uploads/2018/05/word-image-2871-300x143.png 300w, /wp-content/uploads/2018/05/word-image-2871-768x367.png 768w, /wp-content/uploads/2018/05/word-image-2871-1024x489.png 1024w" sizes="(max-width: 1728px) 100vw, 1728px" /><br />
<img loading="lazy" decoding="async" width="1709" height="909" src="/wp-content/uploads/2018/05/word-image-2872.png" class="wp-image-3263" srcset="/wp-content/uploads/2018/05/word-image-2872.png 1709w, /wp-content/uploads/2018/05/word-image-2872-300x160.png 300w, /wp-content/uploads/2018/05/word-image-2872-768x408.png 768w, /wp-content/uploads/2018/05/word-image-2872-1024x545.png 1024w" sizes="(max-width: 1709px) 100vw, 1709px" /><br />
<img loading="lazy" decoding="async" width="1731" height="237" src="/wp-content/uploads/2018/05/word-image-2873.png" class="wp-image-3264" srcset="/wp-content/uploads/2018/05/word-image-2873.png 1731w, /wp-content/uploads/2018/05/word-image-2873-300x41.png 300w, /wp-content/uploads/2018/05/word-image-2873-768x105.png 768w, /wp-content/uploads/2018/05/word-image-2873-1024x140.png 1024w" sizes="(max-width: 1731px) 100vw, 1731px" /><br />
<img loading="lazy" decoding="async" width="1248" height="954" src="/wp-content/uploads/2018/05/word-image-2874.png" class="wp-image-3265" srcset="/wp-content/uploads/2018/05/word-image-2874.png 1248w, /wp-content/uploads/2018/05/word-image-2874-300x229.png 300w, /wp-content/uploads/2018/05/word-image-2874-768x587.png 768w, /wp-content/uploads/2018/05/word-image-2874-1024x783.png 1024w" sizes="(max-width: 1248px) 100vw, 1248px" /></p>
<ol>
<li>
  定义一个formatDataEs6方法格式化用户信息，返回一个HTML字符串
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1346" height="607" src="/wp-content/uploads/2018/05/word-image-2875.png" class="wp-image-3266" srcset="/wp-content/uploads/2018/05/word-image-2875.png 1346w, /wp-content/uploads/2018/05/word-image-2875-300x135.png 300w, /wp-content/uploads/2018/05/word-image-2875-768x346.png 768w, /wp-content/uploads/2018/05/word-image-2875-1024x462.png 1024w" sizes="(max-width: 1346px) 100vw, 1346px" /></p>
<ol>
<li>
  定义一个userList.php页面，接收分页请求，返回数据
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1253" height="774" src="/wp-content/uploads/2018/05/word-image-2876.png" class="wp-image-3267" srcset="/wp-content/uploads/2018/05/word-image-2876.png 1253w, /wp-content/uploads/2018/05/word-image-2876-300x185.png 300w, /wp-content/uploads/2018/05/word-image-2876-768x474.png 768w, /wp-content/uploads/2018/05/word-image-2876-1024x633.png 1024w" sizes="(max-width: 1253px) 100vw, 1253px" /></p>
<h3>underscore工具库</h3>
<p>
  简介：
</p>
<p><img loading="lazy" decoding="async" width="1355" height="629" src="/wp-content/uploads/2018/05/word-image-2877.png" class="wp-image-3268" srcset="/wp-content/uploads/2018/05/word-image-2877.png 1355w, /wp-content/uploads/2018/05/word-image-2877-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2877-768x357.png 768w, /wp-content/uploads/2018/05/word-image-2877-1024x475.png 1024w" sizes="(max-width: 1355px) 100vw, 1355px" /></p>
<ol>
<li>
  编写一个HTML文件，引入underscore.js文件，编写js代码，调用该工具库提供的方法
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1368" height="906" src="/wp-content/uploads/2018/05/word-image-2878.png" class="wp-image-3269" srcset="/wp-content/uploads/2018/05/word-image-2878.png 1368w, /wp-content/uploads/2018/05/word-image-2878-300x199.png 300w, /wp-content/uploads/2018/05/word-image-2878-768x509.png 768w, /wp-content/uploads/2018/05/word-image-2878-1024x678.png 1024w" sizes="(max-width: 1368px) 100vw, 1368px" /></p>
<p>
  注意：_.each() 用于遍历数组 _.uniq() 用于数组去重
</p>
<p>
  2. 效果
</p>
<p><img loading="lazy" decoding="async" width="1109" height="527" src="/wp-content/uploads/2018/05/word-image-2879.png" class="wp-image-3270" srcset="/wp-content/uploads/2018/05/word-image-2879.png 1109w, /wp-content/uploads/2018/05/word-image-2879-300x143.png 300w, /wp-content/uploads/2018/05/word-image-2879-768x365.png 768w, /wp-content/uploads/2018/05/word-image-2879-1024x487.png 1024w" sizes="(max-width: 1109px) 100vw, 1109px" /></p>
<h2>实操-用户删除</h2>
<p>
  功能需求：
</p>
<p><img loading="lazy" decoding="async" width="1779" height="533" src="/wp-content/uploads/2018/05/word-image-2880.png" class="wp-image-3271" srcset="/wp-content/uploads/2018/05/word-image-2880.png 1779w, /wp-content/uploads/2018/05/word-image-2880-300x90.png 300w, /wp-content/uploads/2018/05/word-image-2880-768x230.png 768w, /wp-content/uploads/2018/05/word-image-2880-1024x307.png 1024w" sizes="(max-width: 1779px) 100vw, 1779px" /></p>
<ol>
<li>
  在ulst.php为table元素定义一个id属性
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1813" height="987" src="/wp-content/uploads/2018/05/word-image-2881.png" class="wp-image-3272" srcset="/wp-content/uploads/2018/05/word-image-2881.png 1813w, /wp-content/uploads/2018/05/word-image-2881-300x163.png 300w, /wp-content/uploads/2018/05/word-image-2881-768x418.png 768w, /wp-content/uploads/2018/05/word-image-2881-1024x557.png 1024w" sizes="(max-width: 1813px) 100vw, 1813px" /></p>
<ol>
<li>
  为该table元素绑定一个点击事件
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1646" height="586" src="/wp-content/uploads/2018/05/word-image-2882.png" class="wp-image-3273" srcset="/wp-content/uploads/2018/05/word-image-2882.png 1646w, /wp-content/uploads/2018/05/word-image-2882-300x107.png 300w, /wp-content/uploads/2018/05/word-image-2882-768x273.png 768w, /wp-content/uploads/2018/05/word-image-2882-1024x365.png 1024w" sizes="(max-width: 1646px) 100vw, 1646px" /></p>
<ol>
<li>
  定义一个ajaxDelUser函数，发送ajax请求，删除用户信息
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1259" height="652" src="/wp-content/uploads/2018/05/word-image-2883.png" class="wp-image-3274" srcset="/wp-content/uploads/2018/05/word-image-2883.png 1259w, /wp-content/uploads/2018/05/word-image-2883-300x155.png 300w, /wp-content/uploads/2018/05/word-image-2883-768x398.png 768w, /wp-content/uploads/2018/05/word-image-2883-1024x530.png 1024w" sizes="(max-width: 1259px) 100vw, 1259px" /></p>
<h3>事件优化处理机制简介</h3>
<p><img loading="lazy" decoding="async" width="1608" height="469" src="/wp-content/uploads/2018/05/word-image-2884.png" class="wp-image-3275" srcset="/wp-content/uploads/2018/05/word-image-2884.png 1608w, /wp-content/uploads/2018/05/word-image-2884-300x88.png 300w, /wp-content/uploads/2018/05/word-image-2884-768x224.png 768w, /wp-content/uploads/2018/05/word-image-2884-1024x299.png 1024w" sizes="(max-width: 1608px) 100vw, 1608px" /></p>
<h3>优化处理</h3>
<p><img loading="lazy" decoding="async" width="1518" height="355" src="/wp-content/uploads/2018/05/word-image-2885.png" class="wp-image-3276" srcset="/wp-content/uploads/2018/05/word-image-2885.png 1518w, /wp-content/uploads/2018/05/word-image-2885-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2885-768x180.png 768w, /wp-content/uploads/2018/05/word-image-2885-1024x239.png 1024w" sizes="(max-width: 1518px) 100vw, 1518px" /></p>
<h1>json简介</h1>
<h2><a id="post-3244-_Toc761"></a>①-json是什么？</h2>
<ol>
<li>
  什么是json？
</li>
</ol>
<p>
  答：json是由一个叫做道格拉斯（道叔，josn规范的制定者，一般他是json发现者）发现的一种在多种语言（js\php\java\c\python&#8230;）之间进行数据传递的一个文本的数据格式。以前也可以使用XML来组织格式来交换数据，但是XML操作起来非常的麻烦，慢慢的更多的是使用json格式数据做传递。
</p>
<p>
  注意：虽说现在json非常的流行，但不意味着XML没有使用的必要的。在很多的领域XML还是有其独特的优势，尤其是在数据传递格式非常严苛的情况下（DTD：文档约束，主要是可以去约束XML的定义），例如银行的系统。并且可以做小型的数据库、还可以做配置文件（Java里面很多的配置文件都是使用xml）。
</p>
<p>
  注意：json也是可以作为配置文件的，例如composer的包管理器的配置文件。(现在很多的项目都是使用json作为配置文件)
</p>
<p><img loading="lazy" decoding="async" width="1247" height="961" src="/wp-content/uploads/2018/05/word-image-2886.png" class="wp-image-3277" srcset="/wp-content/uploads/2018/05/word-image-2886.png 1247w, /wp-content/uploads/2018/05/word-image-2886-300x231.png 300w, /wp-content/uploads/2018/05/word-image-2886-768x592.png 768w, /wp-content/uploads/2018/05/word-image-2886-1024x789.png 1024w" sizes="(max-width: 1247px) 100vw, 1247px" /></p>
<p>
  注意：多种格式的数据都可以作为配置文件
</p>
<ol>
<li>
  php.ini
</li>
<li>
  httpd.conf
</li>
<li>
  conf.yaml
</li>
<li>
  composer.json
</li>
<li>
  config.xml
</li>
</ol>
<p>
  面试：json还是XML好？没有什么好或不好，主要是实际的业务需求，以及公司领导的安排。
</p>
<p>
  官网：<a href="http://www.json.org.cn/">http://www.json.org.cn/</a>
</p>
<p><img loading="lazy" decoding="async" width="911" height="336" src="/wp-content/uploads/2018/05/word-image-2887.png" class="wp-image-3278" srcset="/wp-content/uploads/2018/05/word-image-2887.png 911w, /wp-content/uploads/2018/05/word-image-2887-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2887-768x283.png 768w" sizes="(max-width: 911px) 100vw, 911px" /></p>
<p>
  json是啥？
</p>
<p><img loading="lazy" decoding="async" width="1072" height="275" src="/wp-content/uploads/2018/05/word-image-2888.png" class="wp-image-3279" srcset="/wp-content/uploads/2018/05/word-image-2888.png 1072w, /wp-content/uploads/2018/05/word-image-2888-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2888-768x197.png 768w, /wp-content/uploads/2018/05/word-image-2888-1024x263.png 1024w" sizes="(max-width: 1072px) 100vw, 1072px" /></p>
<p>
  网站：<a href="http://www.json.org.cn/standard.htm">http://www.json.org.cn/standard.htm</a>
</p>
<h2><a id="post-3244-_Toc24672"></a>②-json格式到底是如何定义的？</h2>
<p>
  形如下面的数据结构被称为json格式的文本，需要注意：json格式里面的 key/value对是无序的。和php里面的关联数组比较类型，也和js里面的json字面量对象很像。
</p>
<p><img loading="lazy" decoding="async" width="764" height="316" src="/wp-content/uploads/2018/05/word-image-2889.png" class="wp-image-3280" srcset="/wp-content/uploads/2018/05/word-image-2889.png 764w, /wp-content/uploads/2018/05/word-image-2889-300x124.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></p>
<p>
  定义语法：
</p>
<p>
  {
</p>
<p>
  &#8220;key&#8221;: &#8220;value1&#8221;, // value值是字符串的时候必须加上双引号，同时 key 必须要加双引号
</p>
<p>
  &#8220;age&#8221; : 12,
</p>
<p>
  &#8220;isBool&#8221;: true // 最后的key value 不能加逗号
</p>
<p>
  }
</p>
<p>
  通过工具进行校验：
</p>
<p><a href="https://www.bejson.com/">https://www.bejson.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="612" height="607" src="/wp-content/uploads/2018/05/word-image-2890.png" class="wp-image-3281" srcset="/wp-content/uploads/2018/05/word-image-2890.png 612w, /wp-content/uploads/2018/05/word-image-2890-150x150.png 150w, /wp-content/uploads/2018/05/word-image-2890-300x298.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<h2><a id="post-3244-_Toc15714"></a>③-php里面如何处理json格式数据？</h2>
<ol>
<li>
  如何把php里面的复合数据类型转换为json格式的字符串数据？（<strong>json_encode 1. 中文 gb2312 2. Unicode编码</strong>）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1100" height="551" src="/wp-content/uploads/2018/05/word-image-2891.png" class="wp-image-3282" srcset="/wp-content/uploads/2018/05/word-image-2891.png 1100w, /wp-content/uploads/2018/05/word-image-2891-300x150.png 300w, /wp-content/uploads/2018/05/word-image-2891-768x385.png 768w, /wp-content/uploads/2018/05/word-image-2891-1024x513.png 1024w" sizes="(max-width: 1100px) 100vw, 1100px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1112" height="142" src="/wp-content/uploads/2018/05/word-image-2892.png" class="wp-image-3283" srcset="/wp-content/uploads/2018/05/word-image-2892.png 1112w, /wp-content/uploads/2018/05/word-image-2892-300x38.png 300w, /wp-content/uploads/2018/05/word-image-2892-768x98.png 768w, /wp-content/uploads/2018/05/word-image-2892-1024x131.png 1024w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<ol>
<li>
  如何把json格式的数据转换为php里面的复合数组类型？(json_decode)
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1240" height="329" src="/wp-content/uploads/2018/05/word-image-2893.png" class="wp-image-3284" srcset="/wp-content/uploads/2018/05/word-image-2893.png 1240w, /wp-content/uploads/2018/05/word-image-2893-300x80.png 300w, /wp-content/uploads/2018/05/word-image-2893-768x204.png 768w, /wp-content/uploads/2018/05/word-image-2893-1024x272.png 1024w" sizes="(max-width: 1240px) 100vw, 1240px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="743" height="302" src="/wp-content/uploads/2018/05/word-image-2894.png" class="wp-image-3285" srcset="/wp-content/uploads/2018/05/word-image-2894.png 743w, /wp-content/uploads/2018/05/word-image-2894-300x122.png 300w" sizes="(max-width: 743px) 100vw, 743px" /></p>
<p>
  备注：如果json_decode($jsonString) 不加第二个参数，则转换成php里面的一个标准对象
</p>
<p><img loading="lazy" decoding="async" width="1239" height="371" src="/wp-content/uploads/2018/05/word-image-2895.png" class="wp-image-3286" srcset="/wp-content/uploads/2018/05/word-image-2895.png 1239w, /wp-content/uploads/2018/05/word-image-2895-300x90.png 300w, /wp-content/uploads/2018/05/word-image-2895-768x230.png 768w, /wp-content/uploads/2018/05/word-image-2895-1024x307.png 1024w" sizes="(max-width: 1239px) 100vw, 1239px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="647" height="358" src="/wp-content/uploads/2018/05/word-image-2896.png" class="wp-image-3287" srcset="/wp-content/uploads/2018/05/word-image-2896.png 647w, /wp-content/uploads/2018/05/word-image-2896-300x166.png 300w" sizes="(max-width: 647px) 100vw, 647px" /></p>
<ol>
<li>
  注意小的细节：在php里面如果要把一个复合数据类型，里面的中文，转换成json格式字符串，php里面的复合数据类型必须是utf-8的编码。并且转换后的中文数据使用的16进制Unicode编码。同时如果这个时候不希望将中文字符转换为16进制的编码该如何处理呢？
</li>
</ol>
<p><a href="http://www.laruence.com/2011/10/10/2239.html">http://www.laruence.com/2011/10/10/2239.html</a>
</p>
<p><img loading="lazy" decoding="async" width="1134" height="660" src="/wp-content/uploads/2018/05/word-image-2897.png" class="wp-image-3288" srcset="/wp-content/uploads/2018/05/word-image-2897.png 1134w, /wp-content/uploads/2018/05/word-image-2897-300x175.png 300w, /wp-content/uploads/2018/05/word-image-2897-768x447.png 768w, /wp-content/uploads/2018/05/word-image-2897-1024x596.png 1024w" sizes="(max-width: 1134px) 100vw, 1134px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="1246" height="245" src="/wp-content/uploads/2018/05/word-image-2898.png" class="wp-image-3289" srcset="/wp-content/uploads/2018/05/word-image-2898.png 1246w, /wp-content/uploads/2018/05/word-image-2898-300x59.png 300w, /wp-content/uploads/2018/05/word-image-2898-768x151.png 768w, /wp-content/uploads/2018/05/word-image-2898-1024x201.png 1024w" sizes="(max-width: 1246px) 100vw, 1246px" /></p>
<p><strong>注意：如果中文使用的gb2312编码保存的，则转换不成功。</strong>
</p>
<p><img loading="lazy" decoding="async" width="1147" height="934" src="/wp-content/uploads/2018/05/word-image-2899.png" class="wp-image-3290" srcset="/wp-content/uploads/2018/05/word-image-2899.png 1147w, /wp-content/uploads/2018/05/word-image-2899-300x244.png 300w, /wp-content/uploads/2018/05/word-image-2899-768x625.png 768w, /wp-content/uploads/2018/05/word-image-2899-1024x834.png 1024w" sizes="(max-width: 1147px) 100vw, 1147px" /></p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="799" height="179" src="/wp-content/uploads/2018/05/word-image-2900.png" class="wp-image-3291" srcset="/wp-content/uploads/2018/05/word-image-2900.png 799w, /wp-content/uploads/2018/05/word-image-2900-300x67.png 300w, /wp-content/uploads/2018/05/word-image-2900-768x172.png 768w" sizes="(max-width: 799px) 100vw, 799px" /></p>
<p>
  总结：在使用json_encode做复合数据类型转换的时候，如果数据里面存在中文，则必须是utf-8的编码，如果不是，则准换不成功。（千万注意：公司的老的项目使用的是gb2312编码的，这个时候在做接口处理的时候，特别注意，需要把gb2312转换成utf-8编码）。
</p>
<p>
  4. 在php里面如果要把一个复合数据类型，里面的中文转换成json格式字符串，php里面的复合数据类型必须是utf-8的编码。并且转换后的中文数据使用的16进制Unicode编码。同时如果这个时候不希望将中文字符转换为16进制的编码该如何处理呢？
</p>
<p><a href="http://www.laruence.com/2011/10/10/2239.html">http://www.laruence.com/2011/10/10/2239.html</a>
</p>
<p>
  代码：
</p>
<p>
  	header(&#8216;Content-Type:text/html;charset=utf-8&#8217;);
</p>
<p>
  	$data = array(&#8216;name&#8217;=&gt; &#8216;中文&#8217;);
</p>
<p>
  	echo json_encode($data, <strong>JSON_UNESCAPED_UNICODE</strong>);
</p>
<p>
  效果：
</p>
<p><img loading="lazy" decoding="async" width="496" height="121" src="/wp-content/uploads/2018/05/word-image-2901.png" class="wp-image-3292" srcset="/wp-content/uploads/2018/05/word-image-2901.png 496w, /wp-content/uploads/2018/05/word-image-2901-300x73.png 300w" sizes="(max-width: 496px) 100vw, 496px" /></p>
<h2><a id="post-3244-_Toc17254"></a>④-js里面如何处理json格式的数据？</h2>
<ol>
<li>
  如何把js里面的复合数据类型转换成json格式的数据？
</li>
</ol>
<p><img loading="lazy" decoding="async" width="941" height="501" src="/wp-content/uploads/2018/05/word-image-2902.png" class="wp-image-3293" srcset="/wp-content/uploads/2018/05/word-image-2902.png 941w, /wp-content/uploads/2018/05/word-image-2902-300x160.png 300w, /wp-content/uploads/2018/05/word-image-2902-768x409.png 768w" sizes="(max-width: 941px) 100vw, 941px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="580" height="179" src="/wp-content/uploads/2018/05/word-image-2903.png" class="wp-image-3294" srcset="/wp-content/uploads/2018/05/word-image-2903.png 580w, /wp-content/uploads/2018/05/word-image-2903-300x93.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<ol>
<li>
  如何把json格式的数据转换成js里面的复合数据类型？
</li>
</ol>
<p><img loading="lazy" decoding="async" width="889" height="234" src="/wp-content/uploads/2018/05/word-image-2904.png" class="wp-image-3295" srcset="/wp-content/uploads/2018/05/word-image-2904.png 889w, /wp-content/uploads/2018/05/word-image-2904-300x79.png 300w, /wp-content/uploads/2018/05/word-image-2904-768x202.png 768w" sizes="(max-width: 889px) 100vw, 889px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="358" height="103" src="/wp-content/uploads/2018/05/word-image-2905.png" class="wp-image-3296" srcset="/wp-content/uploads/2018/05/word-image-2905.png 358w, /wp-content/uploads/2018/05/word-image-2905-300x86.png 300w" sizes="(max-width: 358px) 100vw, 358px" /></p>
<p><strong><s>注意：也可以使用eval 转换（eval可以执行一个满足js语法格式的字符串）</s></strong>
</p>
<p><img loading="lazy" decoding="async" width="911" height="235" src="/wp-content/uploads/2018/05/word-image-2906.png" class="wp-image-3297" srcset="/wp-content/uploads/2018/05/word-image-2906.png 911w, /wp-content/uploads/2018/05/word-image-2906-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2906-768x198.png 768w" sizes="(max-width: 911px) 100vw, 911px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="503" height="66" src="/wp-content/uploads/2018/05/word-image-2907.png" class="wp-image-3298" srcset="/wp-content/uploads/2018/05/word-image-2907.png 503w, /wp-content/uploads/2018/05/word-image-2907-300x39.png 300w" sizes="(max-width: 503px) 100vw, 503px" /></p>
<p>
  网站：<a href="https://www.zhihu.com/question/19884767">https://www.zhihu.com/question/19884767</a>
</p>
<ol>
<li>
  在jQuery里面也提供对应的转换函数，遍历函数
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1444" height="806" src="/wp-content/uploads/2018/05/word-image-2908.png" class="wp-image-3299" srcset="/wp-content/uploads/2018/05/word-image-2908.png 1444w, /wp-content/uploads/2018/05/word-image-2908-300x167.png 300w, /wp-content/uploads/2018/05/word-image-2908-768x429.png 768w, /wp-content/uploads/2018/05/word-image-2908-1024x572.png 1024w" sizes="(max-width: 1444px) 100vw, 1444px" /></p>
<ol>
<li>
  json2.js文件，可以在js里面把对象和字符串相互的转换（ JSON.parse 和 JSON.stringify 一样，只是做了一个浏览器的兼容性处理，一般在自己的项目的html文件，引入该文件即可，自己会做兼容操作：如果低版本的浏览器不存在JSON.parse 和 JSON.stringify 则使用json2.js文件里面提供的；如果浏览器存在两个方法，则使用浏览器本身提供的方法处理）
</li>
</ol>
<p>
  网站：<a href="https://github.com/douglascrockford/JSON-js" class="broken_link">https://github.com/douglascrockford/JSON-js</a>
</p>
<p><img loading="lazy" decoding="async" width="420" height="161" src="/wp-content/uploads/2018/05/word-image-2909.png" class="wp-image-3300" srcset="/wp-content/uploads/2018/05/word-image-2909.png 420w, /wp-content/uploads/2018/05/word-image-2909-300x115.png 300w" sizes="(max-width: 420px) 100vw, 420px" /></p>
<h1><a id="post-3244-_Toc20909"></a>Ajax之文件上传</h1>
<p>
  文章：<a href="http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html">http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html</a>
</p>
<p>
    <a href="http://blog.csdn.net/inuyasha1121/article/details/51915742">http://blog.csdn.net/inuyasha1121/article/details/51915742</a>
</p>
<h2><a id="post-3244-_Toc32301"></a>①-简介</h2>
<ol>
<li>
  使用Ajax实现文件的上传，但是这个标准只在w3c高版本的浏览器里面有实现，是属于一个ajax level2的标准。在低版本的IE里面是不兼容的。
</li>
</ol>
<p>
  网站：<a href="https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData">https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData</a>
</p>
<ol>
<li>
  在使用Ajax做文件上传的时候，需要借助一个FormData对象，这个对象具有收集表单数据的能力，可以收集表单里面普通的数据，也可以收集文件信息。可以参考下面提供的文件。
</li>
</ol>
<p><img loading="lazy" decoding="async" width="732" height="298" src="/wp-content/uploads/2018/05/word-image-2910.png" class="wp-image-3301" srcset="/wp-content/uploads/2018/05/word-image-2910.png 732w, /wp-content/uploads/2018/05/word-image-2910-300x122.png 300w" sizes="(max-width: 732px) 100vw, 732px" /></p>
<h2><a id="post-3244-_Toc24865"></a>②-FormData对象简单使用</h2>
<p>
  在ajax里面做无刷新文件上传之前，我们需要先了解一个叫做FormData对象，然后这个对象可以帮我们去收集表单的数据（1. 基本数据 text 2. 可以收集上传文件）。
</p>
<ol>
<li>
  设计一个如下的注册的表单（收集基本数据 text password）
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1844" height="993" src="/wp-content/uploads/2018/05/word-image-2911.png" class="wp-image-3302" srcset="/wp-content/uploads/2018/05/word-image-2911.png 1844w, /wp-content/uploads/2018/05/word-image-2911-300x162.png 300w, /wp-content/uploads/2018/05/word-image-2911-768x414.png 768w, /wp-content/uploads/2018/05/word-image-2911-1024x551.png 1024w" sizes="(max-width: 1844px) 100vw, 1844px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1190" height="572" src="/wp-content/uploads/2018/05/word-image-2912.png" class="wp-image-3303" srcset="/wp-content/uploads/2018/05/word-image-2912.png 1190w, /wp-content/uploads/2018/05/word-image-2912-300x144.png 300w, /wp-content/uploads/2018/05/word-image-2912-768x369.png 768w, /wp-content/uploads/2018/05/word-image-2912-1024x492.png 1024w" sizes="(max-width: 1190px) 100vw, 1190px" /></p>
<ol>
<li>
  利用FormData对象收集表单数据，然后使用Ajax技术发送给后台
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1770" height="1001" src="/wp-content/uploads/2018/05/word-image-2913.png" class="wp-image-3304" srcset="/wp-content/uploads/2018/05/word-image-2913.png 1770w, /wp-content/uploads/2018/05/word-image-2913-300x170.png 300w, /wp-content/uploads/2018/05/word-image-2913-768x434.png 768w, /wp-content/uploads/2018/05/word-image-2913-1024x579.png 1024w" sizes="(max-width: 1770px) 100vw, 1770px" /><br />
<img loading="lazy" decoding="async" width="1775" height="633" src="/wp-content/uploads/2018/05/word-image-2914.png" class="wp-image-3305" srcset="/wp-content/uploads/2018/05/word-image-2914.png 1775w, /wp-content/uploads/2018/05/word-image-2914-300x107.png 300w, /wp-content/uploads/2018/05/word-image-2914-768x274.png 768w, /wp-content/uploads/2018/05/word-image-2914-1024x365.png 1024w" sizes="(max-width: 1775px) 100vw, 1775px" /></p>
<p><strong> 注意：</strong>在使用FormData对象收集表单数据，使用Ajax发送POST请求的时候，<strong>不要设置请求头</strong>，如果设置，在服务器端，则无法正常收集post提交的数据信息。
</p>
<ol>
<li>
  服务器定义一个 register.php 文件，接收ajax请求
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1410" height="1016" src="/wp-content/uploads/2018/05/word-image-2915.png" class="wp-image-3306" srcset="/wp-content/uploads/2018/05/word-image-2915.png 1410w, /wp-content/uploads/2018/05/word-image-2915-300x216.png 300w, /wp-content/uploads/2018/05/word-image-2915-768x553.png 768w, /wp-content/uploads/2018/05/word-image-2915-1024x738.png 1024w" sizes="(max-width: 1410px) 100vw, 1410px" /></p>
<h2><a id="post-3244-_Toc4125"></a>③-文件上传-显示进度条效果</h2>
<p>
  进度条效果
</p>
<p><img loading="lazy" decoding="async" width="1663" height="314" src="/wp-content/uploads/2018/05/word-image-2916.png" class="wp-image-3307" srcset="/wp-content/uploads/2018/05/word-image-2916.png 1663w, /wp-content/uploads/2018/05/word-image-2916-300x57.png 300w, /wp-content/uploads/2018/05/word-image-2916-768x145.png 768w, /wp-content/uploads/2018/05/word-image-2916-1024x193.png 1024w" sizes="(max-width: 1663px) 100vw, 1663px" /></p>
<p>
  需求分析：
</p>
<p><img loading="lazy" decoding="async" width="1537" height="547" src="/wp-content/uploads/2018/05/word-image-2917.png" class="wp-image-3308" srcset="/wp-content/uploads/2018/05/word-image-2917.png 1537w, /wp-content/uploads/2018/05/word-image-2917-300x107.png 300w, /wp-content/uploads/2018/05/word-image-2917-768x273.png 768w, /wp-content/uploads/2018/05/word-image-2917-1024x364.png 1024w" sizes="(max-width: 1537px) 100vw, 1537px" /></p>
<ol>
<li>
  由于我们上传要显示进度条，文件一般都是很大的文件，所以需要修改post上传数据的大小。
</li>
<li>
  整个表单提交的大小
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1019" height="377" src="/wp-content/uploads/2018/05/word-image-2918.png" class="wp-image-3309" srcset="/wp-content/uploads/2018/05/word-image-2918.png 1019w, /wp-content/uploads/2018/05/word-image-2918-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2918-768x284.png 768w" sizes="(max-width: 1019px) 100vw, 1019px" /></p>
<p>
  b. 单个文件提供的大小
</p>
<p><img loading="lazy" decoding="async" width="821" height="167" src="/wp-content/uploads/2018/05/word-image-2919.png" class="wp-image-3310" srcset="/wp-content/uploads/2018/05/word-image-2919.png 821w, /wp-content/uploads/2018/05/word-image-2919-300x61.png 300w, /wp-content/uploads/2018/05/word-image-2919-768x156.png 768w" sizes="(max-width: 821px) 100vw, 821px" /></p>
<ol>
<li>
  创建一个上传文件的表单页面
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1754" height="1000" src="/wp-content/uploads/2018/05/word-image-2920.png" class="wp-image-3311" srcset="/wp-content/uploads/2018/05/word-image-2920.png 1754w, /wp-content/uploads/2018/05/word-image-2920-300x171.png 300w, /wp-content/uploads/2018/05/word-image-2920-768x438.png 768w, /wp-content/uploads/2018/05/word-image-2920-1024x584.png 1024w" sizes="(max-width: 1754px) 100vw, 1754px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1543" height="405" src="/wp-content/uploads/2018/05/word-image-2921.png" class="wp-image-3312" srcset="/wp-content/uploads/2018/05/word-image-2921.png 1543w, /wp-content/uploads/2018/05/word-image-2921-300x79.png 300w, /wp-content/uploads/2018/05/word-image-2921-768x202.png 768w, /wp-content/uploads/2018/05/word-image-2921-1024x269.png 1024w" sizes="(max-width: 1543px) 100vw, 1543px" /></p>
<ol>
<li>
  使用Ajax做文件上传的时候，我们需要不断得知文件已经上传文件的大小和文件总大小的一个百分比。</p>
<ol>
<li>
    (loaded  size )/ ( total  size) 等于小的div宽度的百分比
  </li>
<li>
    如何获取文件已经上传的大小和总大小？
  </li>
</ol>
</li>
</ol>
<p>
  答：利用Ajax leval2 第一个新的方法（在这个Ajax对象上面存在一个upload属性，属性里面存在一个onprocess属性，可以这个属性设置一个回调函数，这个回调函数，会在有文件上传的时候，距离一定的间隔进行触发调用）
</p>
<p><img loading="lazy" decoding="async" width="1721" height="1015" src="/wp-content/uploads/2018/05/word-image-2922.png" class="wp-image-3313" srcset="/wp-content/uploads/2018/05/word-image-2922.png 1721w, /wp-content/uploads/2018/05/word-image-2922-300x177.png 300w, /wp-content/uploads/2018/05/word-image-2922-768x453.png 768w, /wp-content/uploads/2018/05/word-image-2922-1024x604.png 1024w" sizes="(max-width: 1721px) 100vw, 1721px" /></p>
<ol>
<li>
  在浏览器使用ajax完成图片上传
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1742" height="1002" src="/wp-content/uploads/2018/05/word-image-2923.png" class="wp-image-3314" srcset="/wp-content/uploads/2018/05/word-image-2923.png 1742w, /wp-content/uploads/2018/05/word-image-2923-300x173.png 300w, /wp-content/uploads/2018/05/word-image-2923-768x442.png 768w, /wp-content/uploads/2018/05/word-image-2923-1024x589.png 1024w" sizes="(max-width: 1742px) 100vw, 1742px" /><br />
<img loading="lazy" decoding="async" width="1771" height="694" src="/wp-content/uploads/2018/05/word-image-2924.png" class="wp-image-3315" srcset="/wp-content/uploads/2018/05/word-image-2924.png 1771w, /wp-content/uploads/2018/05/word-image-2924-300x118.png 300w, /wp-content/uploads/2018/05/word-image-2924-768x301.png 768w, /wp-content/uploads/2018/05/word-image-2924-1024x401.png 1024w" sizes="(max-width: 1771px) 100vw, 1771px" /></p>
<ol>
<li>
  定义一个register.php文件，接收ajax请求，完成上传
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1410" height="1016" src="/wp-content/uploads/2018/05/word-image-2925.png" class="wp-image-3316" srcset="/wp-content/uploads/2018/05/word-image-2925.png 1410w, /wp-content/uploads/2018/05/word-image-2925-300x216.png 300w, /wp-content/uploads/2018/05/word-image-2925-768x553.png 768w, /wp-content/uploads/2018/05/word-image-2925-1024x738.png 1024w" sizes="(max-width: 1410px) 100vw, 1410px" /></p>
<p>
  6. 效果
</p>
<p><img loading="lazy" decoding="async" width="654" height="270" src="/wp-content/uploads/2018/05/word-image-2926.png" class="wp-image-3317" srcset="/wp-content/uploads/2018/05/word-image-2926.png 654w, /wp-content/uploads/2018/05/word-image-2926-300x124.png 300w" sizes="(max-width: 654px) 100vw, 654px" /></p>
<h2>④-上传插件</h2>
<p>
  现在一般来说我们很少自己使用ajax进行文件上传，一般都使用现成插件进行完成。底层的原理使用的 FormData 对象 + ajax ，注意，如果是低版本的IE浏览器也需要做无刷新文件上传，则FormData对象不能在使用，则我们可以使用 iframe技术进行无刷新上传。
</p>
<p>
  插件：
</p>
<ol>
<li>
  百度出的 webuploader
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1700" height="437" src="/wp-content/uploads/2018/05/word-image-2927.png" class="wp-image-3318" srcset="/wp-content/uploads/2018/05/word-image-2927.png 1700w, /wp-content/uploads/2018/05/word-image-2927-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2927-768x197.png 768w, /wp-content/uploads/2018/05/word-image-2927-1024x263.png 1024w" sizes="(max-width: 1700px) 100vw, 1700px" /></p>
<ol>
<li>
  zyupload
</li>
</ol>
<p><img loading="lazy" decoding="async" width="850" height="659" src="/wp-content/uploads/2018/05/word-image-2928.png" class="wp-image-3319" srcset="/wp-content/uploads/2018/05/word-image-2928.png 850w, /wp-content/uploads/2018/05/word-image-2928-300x233.png 300w, /wp-content/uploads/2018/05/word-image-2928-768x595.png 768w" sizes="(max-width: 850px) 100vw, 850px" /></p>
<h1><a id="post-3244-_Toc2063"></a>Ajax跨域问题 </h1>
<h2><a id="post-3244-_Toc11317"></a>①-什么是跨域？</h2>
<p>
  答：当使用Ajax技术去请求本域名的资源信息的时候，是可以直接请求的。但是如果去别的域名的资源信息的时候，这个时候由于浏览器的一个同源政策的限定，是不允许直接去获取别的域名下的资源信息。
</p>
<p>
  例如：<a href="http://www.sinsea.cn/index.html(ajax)" class="broken_link">www.sinsea.cn/index.html(ajax)</a> &#8212;&#8212;&#8212;&#8212;&#8212;&gt;http://www.tngou.net/doc/food(提供的一个接口)
</p>
</p>
<p>
  上面的这种请求就是一个跨域请求。
</p>
<p><img loading="lazy" decoding="async" width="1908" height="624" src="/wp-content/uploads/2018/05/word-image-2929.png" class="wp-image-3320" srcset="/wp-content/uploads/2018/05/word-image-2929.png 1908w, /wp-content/uploads/2018/05/word-image-2929-300x98.png 300w, /wp-content/uploads/2018/05/word-image-2929-768x251.png 768w, /wp-content/uploads/2018/05/word-image-2929-1024x335.png 1024w" sizes="(max-width: 1908px) 100vw, 1908px" /></p>
<h2><a id="post-3244-_Toc3011"></a>②-浏览器的同源政策是什么？</h2>
<p>
  答：现代的浏览器默认只能让Ajax去请求本域名里面的资源信息，如果要请求域名的资源信息，则是不允许的。（备注：严格是是允许请求，但是请求后，会把响应的数据丢弃掉）
</p>
<p>
  为什么浏览器存在同源政策的限定？
</p>
<p>
  答：主要是为了安全。但是由于现在的项目融合比较多，肯定存在跨域的需求。
</p>
<h2><a id="post-3244-_Toc31054"></a>③-跨域示例</h2>
<p><img loading="lazy" decoding="async" width="1908" height="624" src="/wp-content/uploads/2018/05/word-image-2930.png" class="wp-image-3321" srcset="/wp-content/uploads/2018/05/word-image-2930.png 1908w, /wp-content/uploads/2018/05/word-image-2930-300x98.png 300w, /wp-content/uploads/2018/05/word-image-2930-768x251.png 768w, /wp-content/uploads/2018/05/word-image-2930-1024x335.png 1024w" sizes="(max-width: 1908px) 100vw, 1908px" /></p>
<p>
  本域名：local.php.com
</p>
<p>
  请求域名：local.test.com
</p>
<p>
  两个域名不是同一个域。则使用ajax请求就会报错。
</p>
<h2><a id="post-3244-_Toc31613"></a>④-跨域成熟的解决方案</h2>
<p>
  对于Ajax的跨域成熟的解决方案存在如下三种：
</p>
<ol>
<li>
  jsonp技术【最早技术来解决，比ajax还早】
</li>
<li>
  同域代理【需要自己服务器进行处理】
</li>
<li>
  cors 响应头【缺陷 HTML5新标准，现代浏览器才支持】
</li>
</ol>
<p>
  目前使用最多应该是jsonp技术。其次就是同域代理。最后cors设置
</p>
<h3><a id="post-3244-_Toc1582"></a>jsonp的原理-只支持get方式-需要目标网站支持</h3>
<p><strong>简介</strong>
</p>
<ol>
<li>
  由于同源政策的限定，Ajax是没办法直接请求别的域名的资源信息
</li>
<li>
  但是img script 等标签，可以发送网络请求，这些标签不受同源政策的限定
</li>
<li>
  我们可以动态去创造一个script标签，然后把它的src设置我们请求的地址，然后请求的时候还传递一些参数（传递一个叫做callback参数）
</li>
<li>
  请求的目标站，接受请求，过滤参数，对对应的数据格式化成json【把格式化后的json数据放置在传递过程中传递的一个叫做callback的回调函数里面】，然后在进行响应。
</li>
</ol>
<p>
  注意：jsonp只能完成get请求，同时jsonp需要目标网站的支持（把需要返回的数据填充在一个callback的回调函数里面）。
</p>
<p>
  uuid相关资料：
</p>
<p><a href="http://www.jianshu.com/u/811a3c46491e">http://www.jianshu.com/u/811a3c46491e</a>
</p>
<p><strong>功能需求</strong>
</p>
<p>
  请求历史上的今天进行数据获取
</p>
<p>
  API接口：
</p>
<p><a href="https://api.asilu.com/">https://api.asilu.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="1475" height="758" src="/wp-content/uploads/2018/05/word-image-2931.png" class="wp-image-3322" srcset="/wp-content/uploads/2018/05/word-image-2931.png 1475w, /wp-content/uploads/2018/05/word-image-2931-300x154.png 300w, /wp-content/uploads/2018/05/word-image-2931-768x395.png 768w, /wp-content/uploads/2018/05/word-image-2931-1024x526.png 1024w" sizes="(max-width: 1475px) 100vw, 1475px" /></p>
<p>
  历史上的今天：
</p>
<p><a href="https://api.asilu.com/today/todayonhistory/">https://api.asilu.com/today/todayonhistory/</a>
</p>
<p><img loading="lazy" decoding="async" width="1220" height="805" src="/wp-content/uploads/2018/05/word-image-2932.png" class="wp-image-3323" srcset="/wp-content/uploads/2018/05/word-image-2932.png 1220w, /wp-content/uploads/2018/05/word-image-2932-300x198.png 300w, /wp-content/uploads/2018/05/word-image-2932-768x507.png 768w, /wp-content/uploads/2018/05/word-image-2932-1024x676.png 1024w" sizes="(max-width: 1220px) 100vw, 1220px" /></p>
<p><strong>实操</strong>
</p>
<ol>
<li>
  在自己网站定义一个页面，使用jsonp完成网络请求
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1540" height="640" src="/wp-content/uploads/2018/05/word-image-2933.png" class="wp-image-3324" srcset="/wp-content/uploads/2018/05/word-image-2933.png 1540w, /wp-content/uploads/2018/05/word-image-2933-300x125.png 300w, /wp-content/uploads/2018/05/word-image-2933-768x319.png 768w, /wp-content/uploads/2018/05/word-image-2933-1024x426.png 1024w" sizes="(max-width: 1540px) 100vw, 1540px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1478" height="385" src="/wp-content/uploads/2018/05/word-image-2934.png" class="wp-image-3325" srcset="/wp-content/uploads/2018/05/word-image-2934.png 1478w, /wp-content/uploads/2018/05/word-image-2934-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2934-768x200.png 768w, /wp-content/uploads/2018/05/word-image-2934-1024x267.png 1024w" sizes="(max-width: 1478px) 100vw, 1478px" /></p>
<ol>
<li>
  引入jsonp.js文件，使用jsonp进行数据请求
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1704" height="967" src="/wp-content/uploads/2018/05/word-image-2935.png" class="wp-image-3326" srcset="/wp-content/uploads/2018/05/word-image-2935.png 1704w, /wp-content/uploads/2018/05/word-image-2935-300x170.png 300w, /wp-content/uploads/2018/05/word-image-2935-768x436.png 768w, /wp-content/uploads/2018/05/word-image-2935-1024x581.png 1024w" sizes="(max-width: 1704px) 100vw, 1704px" /></p>
<p>
  3. 效果
</p>
<p><img loading="lazy" decoding="async" width="1625" height="914" src="/wp-content/uploads/2018/05/word-image-2936.png" class="wp-image-3327" srcset="/wp-content/uploads/2018/05/word-image-2936.png 1625w, /wp-content/uploads/2018/05/word-image-2936-300x169.png 300w, /wp-content/uploads/2018/05/word-image-2936-768x432.png 768w, /wp-content/uploads/2018/05/word-image-2936-1024x576.png 1024w" sizes="(max-width: 1625px) 100vw, 1625px" /></p>
<h3><a id="post-3244-_Toc7504"></a>同域代理</h3>
<p>
  由于jsonp的技术需要目标网站的支持完成get请求，然后才可以完成请求。现在可以在自己的域名下创建一个动态的脚本文件.php（服务器端不受同源政策的限定），让这个php文件帮我们发送目标网站的请求。
</p>
<p>
  原理图：
</p>
<p><img loading="lazy" decoding="async" width="843" height="241" src="/wp-content/uploads/2018/05/word-image-2937.png" class="wp-image-3328" srcset="/wp-content/uploads/2018/05/word-image-2937.png 843w, /wp-content/uploads/2018/05/word-image-2937-300x86.png 300w, /wp-content/uploads/2018/05/word-image-2937-768x220.png 768w" sizes="(max-width: 843px) 100vw, 843px" /></p>
<p>
  场景：
</p>
<p>
  1. A域名希望通过Ajax请求B域名接口提供的天气信息，直接请求存在跨域，肯定是不允许的
</p>
<p>
  2. A域名的Ajax可以先请求A域名的一个动态的脚本文本（携带一个参数？请求的B域名目标网站），让该脚本文件帮我们请求B域名的接口，然后请求完成后，把数据进行返回给本域名Ａ
</p>
<p>
  3. A域名就可以通过中间的PHP脚本获取到数据
</p>
<p>
  4.  中间的服务器充当的是一个代理人
</p>
<p>
  代码：
</p>
<p>
  A域名的Ajax请求
</p>
<p><img loading="lazy" decoding="async" width="1767" height="817" src="/wp-content/uploads/2018/05/word-image-2938.png" class="wp-image-3329" srcset="/wp-content/uploads/2018/05/word-image-2938.png 1767w, /wp-content/uploads/2018/05/word-image-2938-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2938-768x355.png 768w, /wp-content/uploads/2018/05/word-image-2938-1024x473.png 1024w" sizes="(max-width: 1767px) 100vw, 1767px" /></p>
<p>
  A域名的代理op.php 进行代理请求
</p>
<p><img loading="lazy" decoding="async" width="1689" height="450" src="/wp-content/uploads/2018/05/word-image-2939.png" class="wp-image-3330" srcset="/wp-content/uploads/2018/05/word-image-2939.png 1689w, /wp-content/uploads/2018/05/word-image-2939-300x80.png 300w, /wp-content/uploads/2018/05/word-image-2939-768x205.png 768w, /wp-content/uploads/2018/05/word-image-2939-1024x273.png 1024w" sizes="(max-width: 1689px) 100vw, 1689px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1518" height="838" src="/wp-content/uploads/2018/05/word-image-2940.png" class="wp-image-3331" srcset="/wp-content/uploads/2018/05/word-image-2940.png 1518w, /wp-content/uploads/2018/05/word-image-2940-300x166.png 300w, /wp-content/uploads/2018/05/word-image-2940-768x424.png 768w, /wp-content/uploads/2018/05/word-image-2940-1024x565.png 1024w" sizes="(max-width: 1518px) 100vw, 1518px" /></p>
<h3><a id="post-3244-_Toc12664"></a>cors设置响应头-需要注意目前只支持w3c的浏览器</h3>
<p>
  网站：<a href="http://www.cnblogs.com/Darren_code/p/cors.html">http://www.cnblogs.com/Darren_code/p/cors.html</a>
</p>
<p>
  网站：<a href="http://www.cnblogs.com/hustskyking/">http://www.cnblogs.com/hustskyking/</a>
</p>
<p>
  网站：<a href="http://www.cnblogs.com/TomXu/">http://www.cnblogs.com/TomXu/</a>
</p>
<p>
  原理：在目标网站设置一个允许访问的响应头。
</p>
<p>
  在B域名的目标网站，设置一个响应头
</p>
<p><img loading="lazy" decoding="async" width="1483" height="536" src="/wp-content/uploads/2018/05/word-image-2941.png" class="wp-image-3332" srcset="/wp-content/uploads/2018/05/word-image-2941.png 1483w, /wp-content/uploads/2018/05/word-image-2941-300x108.png 300w, /wp-content/uploads/2018/05/word-image-2941-768x278.png 768w, /wp-content/uploads/2018/05/word-image-2941-1024x370.png 1024w" sizes="(max-width: 1483px) 100vw, 1483px" /></p>
<p>
  在A域名可以直接使用Ajax调用B域名的资源信息
</p>
<p><img loading="lazy" decoding="async" width="1549" height="735" src="/wp-content/uploads/2018/05/word-image-2942.png" class="wp-image-3333" srcset="/wp-content/uploads/2018/05/word-image-2942.png 1549w, /wp-content/uploads/2018/05/word-image-2942-300x142.png 300w, /wp-content/uploads/2018/05/word-image-2942-768x364.png 768w, /wp-content/uploads/2018/05/word-image-2942-1024x486.png 1024w" sizes="(max-width: 1549px) 100vw, 1549px" /></p>
<h3>扩展-允许cors进行跨域</h3>
<p>
  接口：<a href="https://cnodejs.org/api/v1/topics">https://cnodejs.org/api/v1/topics</a>
</p>
<p><img loading="lazy" decoding="async" width="1389" height="928" src="/wp-content/uploads/2018/05/word-image-2943.png" class="wp-image-3334" srcset="/wp-content/uploads/2018/05/word-image-2943.png 1389w, /wp-content/uploads/2018/05/word-image-2943-300x200.png 300w, /wp-content/uploads/2018/05/word-image-2943-768x513.png 768w, /wp-content/uploads/2018/05/word-image-2943-1024x684.png 1024w" sizes="(max-width: 1389px) 100vw, 1389px" /></p>
<p>
  总结：
</p>
<p>
  对于ajax跨域，其真实的解决方法只有 cors（响应头）。
</p>
<p>
  用的 jsonp 、同域代理（解决ajax不能跨域的一种方案）。
</p>
<h1>功能-自己实现</h1>
<p>
  头条网站接口：
</p>
<p><a href="http://v.juhe.cn/toutiao/index?type=&amp;key=d0c418c9d5324a8ddf197e85c3dc9c5a">http://v.juhe.cn/toutiao/index?type=&amp;key=d0c418c9d5324a8ddf197e85c3dc9c5a</a>
</p>
<p><img loading="lazy" decoding="async" width="1503" height="808" src="/wp-content/uploads/2018/05/word-image-2944.png" class="wp-image-3335" srcset="/wp-content/uploads/2018/05/word-image-2944.png 1503w, /wp-content/uploads/2018/05/word-image-2944-300x161.png 300w, /wp-content/uploads/2018/05/word-image-2944-768x413.png 768w, /wp-content/uploads/2018/05/word-image-2944-1024x550.png 1024w" sizes="(max-width: 1503px) 100vw, 1503px" /></p>
<p>
  不支持 jsonp 也不支持 cors 。那么只能进行同域代理。
</p>
<h2>效果</h2>
<p><img loading="lazy" decoding="async" width="1796" height="1001" src="/wp-content/uploads/2018/05/word-image-2945.png" class="wp-image-3336" srcset="/wp-content/uploads/2018/05/word-image-2945.png 1796w, /wp-content/uploads/2018/05/word-image-2945-300x167.png 300w, /wp-content/uploads/2018/05/word-image-2945-768x428.png 768w, /wp-content/uploads/2018/05/word-image-2945-1024x571.png 1024w" sizes="(max-width: 1796px) 100vw, 1796px" /></p>
<h1>加载更多</h1>
<p><img loading="lazy" decoding="async" width="1619" height="975" src="/wp-content/uploads/2018/05/word-image-2946.png" class="wp-image-3337" srcset="/wp-content/uploads/2018/05/word-image-2946.png 1619w, /wp-content/uploads/2018/05/word-image-2946-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2946-768x463.png 768w, /wp-content/uploads/2018/05/word-image-2946-1024x617.png 1024w" sizes="(max-width: 1619px) 100vw, 1619px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3244.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS 高级（一）数据类型转化、执行流程、错误处理、作用域</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 07:01:22 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[作用域]]></category>
		<category><![CDATA[执行流程]]></category>
		<category><![CDATA[数据类型转化]]></category>
		<category><![CDATA[错误处理]]></category>
		<guid isPermaLink="false">/?p=3183</guid>

					<description><![CDATA[JavaScript高级（1） 一、概述 1、JavaScript简介 JavaScript被认为是客户端“脚 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（1）
</p>
<h1>一、概述</h1>
<p>
  1、JavaScript简介
</p>
<p>
  JavaScript被认为是客户端“脚本”，它不常叫“语言”，言外之意是比较简单，但是深入了解之后，你会发现 简单的外表下，蕴藏着丰富的内涵。
</p>
<p>
  JavaScript是由Netscape（网景）提出并发展，它起初名为“livescript”，后从营销角度考虑更名为“javascript”，但它和java没有直接关系，顶多是js被期望发展成java那样面向对象的语言（基于对象）。
</p>
<p>
  现在JavaScript标准由ECMA（European Computer Manufactures Assiocation）制定和维护，因此也叫“ECMAScript”，它是包含了网景的Javascript和微软的Jscript，最新的js版本是ES6（ECMAScript6.0）。
</p>
<p>
  作为客户端脚本的JavaScript常用于网页浏览器的开发，然则它的设计却是一种通用性的脚本语言，可以被嵌入任何应用，例如嵌入falsh脚本化falsh player 嵌入applet脚本化java。
</p>
<p>
  JavaScript应该包含：ECMAScript、DOM、BOM
</p>
<p><a id="post-3183-_Toc485386713"></a><br />
  2、应用场景
</p>
<p>
  ① 数据验证（表单验证）
</p>
<p>
  ② 网页特效（目前大多数的网页特效都是通过JS编写）
</p>
<p>
  ③ 编写网页小游戏
</p>
<p>
  ④ 服务器端编程，数据交互（Ajax、Node.js）
</p>
<h1>二、JavaScript基础回顾</h1>
<p>
  1、检测JavaScript的执行情况
</p>
<p>
  document<strong>.</strong>write();
</p>
<p>
  alert(); === window<strong>.</strong>alert();
</p>
<p>
  console.log(); &#8212; 它可以输出任何类型的变量，而且可以一次性输出多个变量。可以看到数据的结构。
</p>
<p>
  <img loading="lazy" decoding="async" width="761" height="471" src="/wp-content/uploads/2018/05/word-image-2803.png" class="wp-image-3184" srcset="/wp-content/uploads/2018/05/word-image-2803.png 761w, /wp-content/uploads/2018/05/word-image-2803-300x186.png 300w" sizes="(max-width: 761px) 100vw, 761px" />
</p>
<p>
  2、JavaScript变量
</p>
<p>
  1、命名规则
</p>
<ul>
<li>
    变量必须以字母开头
  </li>
<li>
    变量也能以 $ 和 _ 符号开头（不过我们不推荐这么做）
  </li>
<li>
    变量名称对大小写敏感（y 和 Y 是不同的变量）
  </li>
</ul>
<p>
  <img loading="lazy" decoding="async" width="851" height="165" src="/wp-content/uploads/2018/05/word-image-2804.png" class="wp-image-3185" srcset="/wp-content/uploads/2018/05/word-image-2804.png 851w, /wp-content/uploads/2018/05/word-image-2804-300x58.png 300w, /wp-content/uploads/2018/05/word-image-2804-768x149.png 768w" sizes="(max-width: 851px) 100vw, 851px" />
</p>
<p>
  2、一条语句，多个变量
</p>
<p>
  <img loading="lazy" decoding="async" width="344" height="25" src="/wp-content/uploads/2018/05/word-image-2805.png" class="wp-image-3186" srcset="/wp-content/uploads/2018/05/word-image-2805.png 344w, /wp-content/uploads/2018/05/word-image-2805-300x22.png 300w" sizes="(max-width: 344px) 100vw, 344px" />
</p>
<p>
  3、只声明变量，没有赋初值
</p>
<p>
  <img loading="lazy" decoding="async" width="458" height="57" src="/wp-content/uploads/2018/05/word-image-2806.png" class="wp-image-3187" srcset="/wp-content/uploads/2018/05/word-image-2806.png 458w, /wp-content/uploads/2018/05/word-image-2806-300x37.png 300w" sizes="(max-width: 458px) 100vw, 458px" />
</p>
<p>
  4、重新声明变量
</p>
<p>
  <img loading="lazy" decoding="async" width="807" height="141" src="/wp-content/uploads/2018/05/word-image-2807.png" class="wp-image-3188" srcset="/wp-content/uploads/2018/05/word-image-2807.png 807w, /wp-content/uploads/2018/05/word-image-2807-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2807-768x134.png 768w" sizes="(max-width: 807px) 100vw, 807px" />
</p>
<p>
  3、常量
</p>
<p>
  常量必须给初始值；
</p>
<p>
  常量不能改变值；
</p>
<p>
  常量不能重新定义；
</p>
<p>
  使用const来声明常量。
</p>
<p>
  <img loading="lazy" decoding="async" width="473" height="88" src="/wp-content/uploads/2018/05/word-image-2808.png" class="wp-image-3189" srcset="/wp-content/uploads/2018/05/word-image-2808.png 473w, /wp-content/uploads/2018/05/word-image-2808-300x56.png 300w" sizes="(max-width: 473px) 100vw, 473px" />
</p>
<p>
  4、运算符
</p>
<p>
  1、算数运算符
</p>
<p>
  加减乘除 累加 累减
</p>
<p>
  <img loading="lazy" decoding="async" width="633" height="150" src="/wp-content/uploads/2018/05/word-image-2809.png" class="wp-image-3190" srcset="/wp-content/uploads/2018/05/word-image-2809.png 633w, /wp-content/uploads/2018/05/word-image-2809-300x71.png 300w" sizes="(max-width: 633px) 100vw, 633px" />
</p>
<p>
  2、赋值运算符
</p>
<p>
  编程中，“=”表示赋值，意思是将等号后面的值赋值给等号前面的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="534" height="154" src="/wp-content/uploads/2018/05/word-image-2810.png" class="wp-image-3191" srcset="/wp-content/uploads/2018/05/word-image-2810.png 534w, /wp-content/uploads/2018/05/word-image-2810-300x87.png 300w" sizes="(max-width: 534px) 100vw, 534px" />
</p>
<p>
  3、用于字符串的+运算符《》
</p>
<p>
  js中用“+”连接字符串，类似于php中的“点”。
</p>
<p>
  如果“+”前后都是数值型，那么“+”表示加法运算。
</p>
<p>
  <img loading="lazy" decoding="async" width="944" height="135" src="/wp-content/uploads/2018/05/word-image-2811.png" class="wp-image-3192" srcset="/wp-content/uploads/2018/05/word-image-2811.png 944w, /wp-content/uploads/2018/05/word-image-2811-300x43.png 300w, /wp-content/uploads/2018/05/word-image-2811-768x110.png 768w" sizes="(max-width: 944px) 100vw, 944px" />
</p>
<p>
  4、比较运算符
</p>
<p>
  大于、小于、大于等于….  全等于、不全等
</p>
<p>
  == ：表示相等判断，只判断值是否想等，不考虑数据类型。比如5 == &#8216;5&#8217;  结果为true
</p>
<p>
  === ：表示全等判断，即考虑值是否想等，也考虑数据类型是否相同。比如5===&#8217;5&#8217;，结果为false。
</p>
<p>
  5、三元运算符（三目、条件）
</p>
<p>
  PHP：
</p>
<p>
  $res = isset($_GET[&#8216;type&#8217;]) ? &#8216;a&#8217; : &#8216;b&#8217;;
</p>
<p>
  JavaScript：
</p>
<p>
  var a = 5==&#8217;5&#8242; ? &#8216;hello&#8217; : &#8216;nihao&#8217;;
</p>
<p>
  6、逻辑运算符
</p>
<p>
  and &amp;&amp;
</p>
<p>
  or ||
</p>
<p>
  !
</p>
<p>
  <img loading="lazy" decoding="async" width="1068" height="272" src="/wp-content/uploads/2018/05/word-image-2812.png" class="wp-image-3193" srcset="/wp-content/uploads/2018/05/word-image-2812.png 1068w, /wp-content/uploads/2018/05/word-image-2812-300x76.png 300w, /wp-content/uploads/2018/05/word-image-2812-768x196.png 768w, /wp-content/uploads/2018/05/word-image-2812-1024x261.png 1024w" sizes="(max-width: 1068px) 100vw, 1068px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1020" height="390" src="/wp-content/uploads/2018/05/word-image-2813.png" class="wp-image-3194" srcset="/wp-content/uploads/2018/05/word-image-2813.png 1020w, /wp-content/uploads/2018/05/word-image-2813-300x115.png 300w, /wp-content/uploads/2018/05/word-image-2813-768x294.png 768w" sizes="(max-width: 1020px) 100vw, 1020px" />
</p>
<p>
  5、流程控制
</p>
<p>
  循环：for  while  do…while  for…in
</p>
<p>
  跳出循环：break  continue
</p>
<p>
  循环结构另一种写法
</p>
<p>
  <img loading="lazy" decoding="async" width="461" height="203" src="/wp-content/uploads/2018/05/word-image-2814.png" class="wp-image-3195" srcset="/wp-content/uploads/2018/05/word-image-2814.png 461w, /wp-content/uploads/2018/05/word-image-2814-300x132.png 300w" sizes="(max-width: 461px) 100vw, 461px" />
</p>
<p>
  案例：
</p>
<p>
  查找质数（素数），只能被1和它本身整除的数就是质数。1既不是质数也不是和数。
</p>
<p>
  质数举例：2,3,5,7,11,13
</p>
<p>
  和数举例：4,6,8,9,10
</p>
<p>
  用程序查找100以内的质数。
</p>
<p>
  <img loading="lazy" decoding="async" width="939" height="401" src="/wp-content/uploads/2018/05/word-image-2815.png" class="wp-image-3196" srcset="/wp-content/uploads/2018/05/word-image-2815.png 939w, /wp-content/uploads/2018/05/word-image-2815-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2815-768x328.png 768w" sizes="(max-width: 939px) 100vw, 939px" />
</p>
<p>
  跳出循环：
</p>
<p>
  break跳出循环，终止该循环
</p>
<p>
  continue跳过当前这次循环，继续执行下一次循环
</p>
<p>
  <img loading="lazy" decoding="async" width="989" height="309" src="/wp-content/uploads/2018/05/word-image-2816.png" class="wp-image-3197" srcset="/wp-content/uploads/2018/05/word-image-2816.png 989w, /wp-content/uploads/2018/05/word-image-2816-300x94.png 300w, /wp-content/uploads/2018/05/word-image-2816-768x240.png 768w" sizes="(max-width: 989px) 100vw, 989px" />
</p>
<p>
  6、函数
</p>
<p>
  1、定义
</p>
<p>
  function  functionName(参数列表){
</p>
<p>
  	函数体
</p>
<p>
  	//return
</p>
<p>
  }
</p>
<p>
  2、函数参数默认值
</p>
<p>
  JavaScript中函数的参数不能有默认值。ES6中的函数才允许参数有默认值。目前IE11不支持函数参数有默认值，但是火狐、谷歌、UC支持。
</p>
<p>
  <img loading="lazy" decoding="async" width="517" height="108" src="/wp-content/uploads/2018/05/word-image-2817.png" class="wp-image-3198" srcset="/wp-content/uploads/2018/05/word-image-2817.png 517w, /wp-content/uploads/2018/05/word-image-2817-300x63.png 300w" sizes="(max-width: 517px) 100vw, 517px" />
</p>
<p>
  如果就想实现y有默认值这种效果，怎么办？
</p>
<p>
  <img loading="lazy" decoding="async" width="557" height="178" src="/wp-content/uploads/2018/05/word-image-2818.png" class="wp-image-3199" srcset="/wp-content/uploads/2018/05/word-image-2818.png 557w, /wp-content/uploads/2018/05/word-image-2818-300x96.png 300w" sizes="(max-width: 557px) 100vw, 557px" />
</p>
<p>
  3、函数参数不固定
</p>
<p>
  使用arguments可以获取到函数的所有参数。
</p>
<p>
  arguments[0]表示函数的第一个参数
</p>
<p>
  arguments[1]表示函数的第二个参数
</p>
<p>
  ….
</p>
<p>
  以此类推。
</p>
<p>
  arguments.length表示函数参数的个数。
</p>
<p>
  <img loading="lazy" decoding="async" width="1021" height="406" src="/wp-content/uploads/2018/05/word-image-2819.png" class="wp-image-3200" srcset="/wp-content/uploads/2018/05/word-image-2819.png 1021w, /wp-content/uploads/2018/05/word-image-2819-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2819-768x305.png 768w" sizes="(max-width: 1021px) 100vw, 1021px" />
</p>
<p>
  4、函数作为变量
</p>
<p>
  <img loading="lazy" decoding="async" width="739" height="237" src="/wp-content/uploads/2018/05/word-image-2820.png" class="wp-image-3201" srcset="/wp-content/uploads/2018/05/word-image-2820.png 739w, /wp-content/uploads/2018/05/word-image-2820-300x96.png 300w" sizes="(max-width: 739px) 100vw, 739px" />
</p>
<p>
  另一种把函数当做另一个函数的参数的形式：
</p>
<p>
  <img loading="lazy" decoding="async" width="621" height="178" src="/wp-content/uploads/2018/05/word-image-2821.png" class="wp-image-3202" srcset="/wp-content/uploads/2018/05/word-image-2821.png 621w, /wp-content/uploads/2018/05/word-image-2821-300x86.png 300w" sizes="(max-width: 621px) 100vw, 621px" />
</p>
<p>
  5、函数自调用
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="380" src="/wp-content/uploads/2018/05/word-image-2822.png" class="wp-image-3203" srcset="/wp-content/uploads/2018/05/word-image-2822.png 838w, /wp-content/uploads/2018/05/word-image-2822-300x136.png 300w, /wp-content/uploads/2018/05/word-image-2822-768x348.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<p>
  6、函数在内存中的形式
</p>
<p>
  <img loading="lazy" decoding="async" width="498" height="186" src="/wp-content/uploads/2018/05/word-image-2823.png" class="wp-image-3204" srcset="/wp-content/uploads/2018/05/word-image-2823.png 498w, /wp-content/uploads/2018/05/word-image-2823-300x112.png 300w" sizes="(max-width: 498px) 100vw, 498px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="878" height="158" src="/wp-content/uploads/2018/05/word-image-2824.png" class="wp-image-3205" srcset="/wp-content/uploads/2018/05/word-image-2824.png 878w, /wp-content/uploads/2018/05/word-image-2824-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2824-768x138.png 768w" sizes="(max-width: 878px) 100vw, 878px" />
</p>
<p>
  7、数组
</p>
<p>
  声明数组的方式：
</p>
<p>
  ①、var arr = new Array(数组的单元1, 单元2, 单元3….);
</p>
<p>
  ②、var arr = new Array(数字); //数字表示数组元素的个数
</p>
<p>
  ③、var arr = [数组的单元1, 单元2, 单元3….];
</p>
<p>
  用length表示数组元素的个数，数组的长度。
</p>
<p>
  <img loading="lazy" decoding="async" width="1236" height="307" src="/wp-content/uploads/2018/05/word-image-2825.png" class="wp-image-3206" srcset="/wp-content/uploads/2018/05/word-image-2825.png 1236w, /wp-content/uploads/2018/05/word-image-2825-300x75.png 300w, /wp-content/uploads/2018/05/word-image-2825-768x191.png 768w, /wp-content/uploads/2018/05/word-image-2825-1024x254.png 1024w" sizes="(max-width: 1236px) 100vw, 1236px" />
</p>
<p>
  8、数据类型
</p>
<p>
  1、类型种类
</p>
<p>
  PHP有8中数据类型：
</p>
<p>
  	4种基本数据类型：bool、string、int、float
</p>
<p>
  	2种复合数据类型：array、object
</p>
<p>
  	2种特殊数据类型：null、resource
</p>
<p>
  JavaScript有7种数据：
</p>
<p>
  	3种基本数据类型：string、bool、number
</p>
<p>
  	2种复合数据类型：array、object
</p>
<p>
  	2种特殊数据类型：null、undefined
</p>
<p>
  2、判断数据类型
</p>
<p>
  使用typeof来判断变量的数据类型：
</p>
<p>
  <img loading="lazy" decoding="async" width="842" height="430" src="/wp-content/uploads/2018/05/word-image-2826.png" class="wp-image-3207" srcset="/wp-content/uploads/2018/05/word-image-2826.png 842w, /wp-content/uploads/2018/05/word-image-2826-300x153.png 300w, /wp-content/uploads/2018/05/word-image-2826-768x392.png 768w" sizes="(max-width: 842px) 100vw, 842px" />
</p>
<p>
  undefined &#8211; 如果变量是 Undefined 类型的
</p>
<p>
  boolean &#8211; 如果变量是 Boolean 类型的
</p>
<p>
  number &#8211; 如果变量是 Number 类型的
</p>
<p>
  string &#8211; 如果变量是 String 类型的
</p>
<p>
  object &#8211; 如果变量是一种引用类型（数组、对象）或 Null 类型的
</p>
<p><strong>注释</strong>：您也许会问，为什么 typeof 运算符对于 null 值会返回 &#8220;object&#8221;。这实际上是 JavaScript 最初实现中的一个错误，然后被 ECMAScript 沿用了。现在，null 被认为是对象的占位符，从而解释了这一矛盾，但从技术上来说，它仍然是原始值。
</p>
<h1>三、数据类型转化</h1>
<p>
  1、转化成字符串
</p>
<p>
  1、使用toString()方法。
</p>
<p>
  常规转化：
</p>
<p>
  用法：变量<strong>.</strong>toString();
</p>
<p>
  <img loading="lazy" decoding="async" width="966" height="431" src="/wp-content/uploads/2018/05/word-image-2827.png" class="wp-image-3208" srcset="/wp-content/uploads/2018/05/word-image-2827.png 966w, /wp-content/uploads/2018/05/word-image-2827-300x134.png 300w, /wp-content/uploads/2018/05/word-image-2827-768x343.png 768w" sizes="(max-width: 966px) 100vw, 966px" />
</p>
<p>
  基模式：
</p>
<p>
  基模式针对的是整型的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="700" height="113" src="/wp-content/uploads/2018/05/word-image-2828.png" class="wp-image-3209" srcset="/wp-content/uploads/2018/05/word-image-2828.png 700w, /wp-content/uploads/2018/05/word-image-2828-300x48.png 300w" sizes="(max-width: 700px) 100vw, 700px" />
</p>
<p>
  1110  十进制：
</p>
<p>
  0*2<sup>0</sup> + 1*2<sup>1</sup> + 1*2<sup>2</sup> + 1*2<sup>3</sup> = 0 + 2 + 4 + 8 = 14
</p>
<p>
  14  二进制：辗转相除法，最后取余数
</p>
<p>
  14/2 = 7 ….. 0
</p>
<p>
  7/2 = 3 …… 1
</p>
<p>
  3/2 = 1 …….1
</p>
<p>
  1/2 = 0 …….1
</p>
<p>
  将余数反过来就是结果：1110
</p>
<p>
  2、使用String()强制类型转化。
</p>
<p>
  强制类型转化使用的方法是String();
</p>
<p>
  用法：String(变量);
</p>
<p>
  <img loading="lazy" decoding="async" width="753" height="409" src="/wp-content/uploads/2018/05/word-image-2829.png" class="wp-image-3210" srcset="/wp-content/uploads/2018/05/word-image-2829.png 753w, /wp-content/uploads/2018/05/word-image-2829-300x163.png 300w" sizes="(max-width: 753px) 100vw, 753px" />
</p>
<p>
  2、转化成数字
</p>
<p>
  1、转化成整型parseInt()
</p>
<p>
  parseInt() 方法首先查看位置 0 处的字符，判断它是否是个有效数字；如果不是，该方法将返回 NaN（not a number），不再继续执行其他操作。但如果该字符是有效数字，该方法将查看位置 1 处的字符，进行同样的测试。这一过程将持续到发现非有效数字的字符为止，此时 parseInt() 将把该字符之前的字符串转换成数字。
</p>
<p>
  <img loading="lazy" decoding="async" width="931" height="158" src="/wp-content/uploads/2018/05/word-image-2830.png" class="wp-image-3211" srcset="/wp-content/uploads/2018/05/word-image-2830.png 931w, /wp-content/uploads/2018/05/word-image-2830-300x51.png 300w, /wp-content/uploads/2018/05/word-image-2830-768x130.png 768w" sizes="(max-width: 931px) 100vw, 931px" />
</p>
<p>
  字符串中包含的数字字面量会被正确转换为数字，比如 &#8220;0xA&#8221; 会被正确转换为数字 10。不过，字符串 &#8220;22.5&#8221; 将被转换成 22，因为对于整数来说，小数点是无效字符。
</p>
<p>
  parseInt() 方法还有基模式，可以把二进制、八进制、十六进制或其他任何进制的字符串转换成十进制整数。基是由 parseInt() 方法的第二个参数指定的.
</p>
<p>
  <img loading="lazy" decoding="async" width="874" height="57" src="/wp-content/uploads/2018/05/word-image-2831.png" class="wp-image-3212" srcset="/wp-content/uploads/2018/05/word-image-2831.png 874w, /wp-content/uploads/2018/05/word-image-2831-300x20.png 300w, /wp-content/uploads/2018/05/word-image-2831-768x50.png 768w" sizes="(max-width: 874px) 100vw, 874px" />
</p>
<p>
  2、转化成浮点型parseFloat()
</p>
<p>
  parseFloat() 方法与 parseInt() 方法的处理方式相似，从位置 0 开始查看每个字符，直到找到第一个非有效的字符为止，然后把该字符之前的字符串转换成整数。
</p>
<p>
  不过，对于这个方法来说，第一个出现的小数点是有效字符。如果有两个小数点，第二个小数点将被看作无效的。parseFloat() 会把这个小数点之前的字符转换成数字。这意味着字符串 &#8220;11.22.33&#8221; 将被解析成 11.22。
</p>
<p>
  使用 parseFloat() 方法的另一不同之处在于，字符串必须以十进制形式表示浮点数，而不是用八进制或十六进制。该方法会忽略前导 0，所以八进制数 0102 将被解析为 102。对于十六进制数 0xA，该方法将返回 NaN，因为在浮点数中，x 不是有效字符。（注释：经测试，具体的浏览器实现会返回 0，而不是 NaN。）
</p>
<p>
  <img loading="lazy" decoding="async" width="849" height="131" src="/wp-content/uploads/2018/05/word-image-2832.png" class="wp-image-3213" srcset="/wp-content/uploads/2018/05/word-image-2832.png 849w, /wp-content/uploads/2018/05/word-image-2832-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2832-768x119.png 768w" sizes="(max-width: 849px) 100vw, 849px" />
</p>
<p>
  此外，parseFloat() 方法也没有基模式。
</p>
<p>
  3、强制类型转化Number()
</p>
<p>
  <img loading="lazy" decoding="async" width="720" height="276" src="/wp-content/uploads/2018/05/word-image-2833.png" class="wp-image-3214" srcset="/wp-content/uploads/2018/05/word-image-2833.png 720w, /wp-content/uploads/2018/05/word-image-2833-300x115.png 300w" sizes="(max-width: 720px) 100vw, 720px" />
</p>
<p>
  3、转化成布尔
</p>
<p>
  当要转换的值是至少有一个字符的字符串(非空字符串)、非 0 数字或对象时，Boolean() 函数将返回 true。
</p>
<p>
  如果该值是空字符串、数字 0、undefined 或 null，它将返回 false。
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="208" src="/wp-content/uploads/2018/05/word-image-2834.png" class="wp-image-3215" srcset="/wp-content/uploads/2018/05/word-image-2834.png 757w, /wp-content/uploads/2018/05/word-image-2834-300x82.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<h1>四、执行流程</h1>
<p>
  1、全局环境
</p>
<p>
  js在运行时，首先会创建一个全局执行环境，这个全局环境就是定义一个全局对象，页面中所有的内容（不同的script中的内容） 都是这个全局对象的成员，在浏览器javascript中（嵌入网页的js）这个全局对象是window。
</p>
<p>
  <img loading="lazy" decoding="async" width="1194" height="291" src="/wp-content/uploads/2018/05/word-image-2835.png" class="wp-image-3216" srcset="/wp-content/uploads/2018/05/word-image-2835.png 1194w, /wp-content/uploads/2018/05/word-image-2835-300x73.png 300w, /wp-content/uploads/2018/05/word-image-2835-768x187.png 768w, /wp-content/uploads/2018/05/word-image-2835-1024x250.png 1024w" sizes="(max-width: 1194px) 100vw, 1194px" />
</p>
<p>
  除此之外，还可以调用window对象中的a或者b，看一下window对象中是否有这两个成员。
</p>
<p>
  2、执行流程
</p>
<p>
  读一段（一个script标签）代码  编译（分析词法、句法）  执行（输出、调用）  继续读下一段script
</p>
<p>
  <img loading="lazy" decoding="async" width="585" height="419" src="/wp-content/uploads/2018/05/word-image-2836.png" class="wp-image-3217" srcset="/wp-content/uploads/2018/05/word-image-2836.png 585w, /wp-content/uploads/2018/05/word-image-2836-300x215.png 300w" sizes="(max-width: 585px) 100vw, 585px" />
</p>
<p>
  对于同一个script代码段中的函数来说，函数会预先加载。也就是说可以先调用函数，后声明函数。
</p>
<p>
  但是不能在前一个script代码段中调用后一个script代码段中的函数。
</p>
<p>
  <img loading="lazy" decoding="async" width="945" height="365" src="/wp-content/uploads/2018/05/word-image-2837.png" class="wp-image-3218" srcset="/wp-content/uploads/2018/05/word-image-2837.png 945w, /wp-content/uploads/2018/05/word-image-2837-300x116.png 300w, /wp-content/uploads/2018/05/word-image-2837-768x297.png 768w" sizes="(max-width: 945px) 100vw, 945px" />
</p>
<p>
  3、错误类型
</p>
<p>
  编译错误：对词法、句法的分析，也就是语法上有没有错误。
</p>
<p>
  <img loading="lazy" decoding="async" width="983" height="424" src="/wp-content/uploads/2018/05/word-image-2838.png" class="wp-image-3219" srcset="/wp-content/uploads/2018/05/word-image-2838.png 983w, /wp-content/uploads/2018/05/word-image-2838-300x129.png 300w, /wp-content/uploads/2018/05/word-image-2838-768x331.png 768w" sizes="(max-width: 983px) 100vw, 983px" />
</p>
<p>
  执行错误：输出、调用函数等。
</p>
<p>
  <img loading="lazy" decoding="async" width="1064" height="432" src="/wp-content/uploads/2018/05/word-image-2839.png" class="wp-image-3220" srcset="/wp-content/uploads/2018/05/word-image-2839.png 1064w, /wp-content/uploads/2018/05/word-image-2839-300x122.png 300w, /wp-content/uploads/2018/05/word-image-2839-768x312.png 768w, /wp-content/uploads/2018/05/word-image-2839-1024x416.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" />
</p>
<p>
  如果出现语法上的错误，当前的script代码段的内容全部终止执行
</p>
<p>
  如果发现执行错误，当前script代码段错误之前的代码还能够正常执行，错误之后的代码会终止执行。
</p>
<p>
  无论发生哪种错误，都不会影响下一个script代码段。
</p>
<p>
  4、异常处理
</p>
<p>
  可以用try…catch…来处理。在js中，错误处理类是Error（类似于PHP中的Exception）。
</p>
<p>
  自然抛出：
</p>
<p>
  <img loading="lazy" decoding="async" width="787" height="165" src="/wp-content/uploads/2018/05/word-image-2840.png" class="wp-image-3221" srcset="/wp-content/uploads/2018/05/word-image-2840.png 787w, /wp-content/uploads/2018/05/word-image-2840-300x63.png 300w, /wp-content/uploads/2018/05/word-image-2840-768x161.png 768w" sizes="(max-width: 787px) 100vw, 787px" />
</p>
<p>
  手动抛出：
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="152" src="/wp-content/uploads/2018/05/word-image-2841.png" class="wp-image-3222" srcset="/wp-content/uploads/2018/05/word-image-2841.png 847w, /wp-content/uploads/2018/05/word-image-2841-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2841-768x138.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<h1>五、作用域（链）</h1>
<p>
  1、作用域分类
</p>
<p>
  js中只有全局作用域和局部作用域，ES6中还有块作用域。
</p>
<p>
  2、作用域
</p>
<p>
  作用域就是变量有效的活动空间。比如函数内部的用var声明的变量，它的活动空间就是函数内部，那么函数内部就是改变量的作用域。
</p>
<p>
  局部作用域：函数内部。
</p>
<p>
  全局作用域：函数外部。
</p>
<p><strong>案例一：函数内部可以使用函数外部的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="696" height="176" src="/wp-content/uploads/2018/05/word-image-2842.png" class="wp-image-3223" srcset="/wp-content/uploads/2018/05/word-image-2842.png 696w, /wp-content/uploads/2018/05/word-image-2842-300x76.png 300w" sizes="(max-width: 696px) 100vw, 696px" />
</p>
<p>
  复杂一点的案例
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="256" src="/wp-content/uploads/2018/05/word-image-2843.png" class="wp-image-3224" srcset="/wp-content/uploads/2018/05/word-image-2843.png 838w, /wp-content/uploads/2018/05/word-image-2843-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2843-768x235.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<p><strong>案例二：函数外部不能够使用函数内部用var声明的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="935" height="162" src="/wp-content/uploads/2018/05/word-image-2844.png" class="wp-image-3225" srcset="/wp-content/uploads/2018/05/word-image-2844.png 935w, /wp-content/uploads/2018/05/word-image-2844-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2844-768x133.png 768w" sizes="(max-width: 935px) 100vw, 935px" />
</p>
<p><strong>案例三：函数外部能够使用函数内部没有用var声明的变量</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="655" height="137" src="/wp-content/uploads/2018/05/word-image-2845.png" class="wp-image-3226" srcset="/wp-content/uploads/2018/05/word-image-2845.png 655w, /wp-content/uploads/2018/05/word-image-2845-300x63.png 300w" sizes="(max-width: 655px) 100vw, 655px" />
</p>
<p><strong>案例四：带参数的情况</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="661" height="255" src="/wp-content/uploads/2018/05/word-image-2846.png" class="wp-image-3227" srcset="/wp-content/uploads/2018/05/word-image-2846.png 661w, /wp-content/uploads/2018/05/word-image-2846-300x116.png 300w" sizes="(max-width: 661px) 100vw, 661px" />
</p>
<p>
  4、作用域链
</p>
<p>
  <img loading="lazy" decoding="async" width="782" height="256" src="/wp-content/uploads/2018/05/word-image-2847.png" class="wp-image-3228" srcset="/wp-content/uploads/2018/05/word-image-2847.png 782w, /wp-content/uploads/2018/05/word-image-2847-300x98.png 300w, /wp-content/uploads/2018/05/word-image-2847-768x251.png 768w" sizes="(max-width: 782px) 100vw, 782px" />
</p>
<p>
  当访问一个变量的时候，首先看当前的作用域中是否有这个变量的声明，如果有，直接使用它，如果没有，那么去上一层作用域中查找，上一层作用域如果也没有该变量的声明，则继续向上一层作用域中查找，直到全局作用域。这个链式的查找方式就是作用域链。
</p>
<h1>六、事件</h1>
<p>
  1、事件定义
</p>
<p>
  事件由什么组成：
</p>
<p>
  	用户的行为（鼠标行为、键盘行为） +  JavaScript引擎 + 事件表达式
</p>
<p>
  2、事件表达式
</p>
<p>
  <img loading="lazy" decoding="async" width="796" height="160" src="/wp-content/uploads/2018/05/word-image-2848.png" class="wp-image-3229" srcset="/wp-content/uploads/2018/05/word-image-2848.png 796w, /wp-content/uploads/2018/05/word-image-2848-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2848-768x154.png 768w" sizes="(max-width: 796px) 100vw, 796px" />
</p>
<p>
  3、事件绑定的三种方式
</p>
<p>
  1、使用dom对象，绑定事件（动态绑定）
</p>
<p>
  这种方式完全不用考虑html。
</p>
<p>
  这种方式，就是获取要绑定事件的dom对象，然后给其绑定一个事件处理函数即可。
</p>
<p>
  <img loading="lazy" decoding="async" width="796" height="160" src="/wp-content/uploads/2018/05/word-image-2849.png" class="wp-image-3230" srcset="/wp-content/uploads/2018/05/word-image-2849.png 796w, /wp-content/uploads/2018/05/word-image-2849-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2849-768x154.png 768w" sizes="(max-width: 796px) 100vw, 796px" />
</p>
<p><strong>事件处理函数中的 this表示绑定该事件的dom对象</strong>。
</p>
<p>
  2、行内绑定
</p>
<p>
  直接在标签内绑定一个事件。
</p>
<p>
  <img loading="lazy" decoding="async" width="547" height="42" src="/wp-content/uploads/2018/05/word-image-2850.png" class="wp-image-3231" srcset="/wp-content/uploads/2018/05/word-image-2850.png 547w, /wp-content/uploads/2018/05/word-image-2850-300x23.png 300w" sizes="(max-width: 547px) 100vw, 547px" />
</p>
<p>
  这种绑定事件的方式，js中的this表示当前的标签的dom对象。
</p>
<p>
  3、行内绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="793" height="181" src="/wp-content/uploads/2018/05/word-image-2851.png" class="wp-image-3232" srcset="/wp-content/uploads/2018/05/word-image-2851.png 793w, /wp-content/uploads/2018/05/word-image-2851-300x68.png 300w, /wp-content/uploads/2018/05/word-image-2851-768x175.png 768w" sizes="(max-width: 793px) 100vw, 793px" />
</p>
<p>
  这种绑定方式中的this表示window对象。
</p>
<p>
  4、常用事件
</p>
<p>
  页面事件
</p>
<p>
  onload ：当页面载入完毕后触发
</p>
<p>
  焦点事件
</p>
<p>
  onfocus ：当获取焦点时触发
</p>
<p>
  onblur ：当失去焦点时触发
</p>
<p>
  鼠标事件
</p>
<p>
  onmouseover ：当鼠标悬浮时触发
</p>
<p>
  onmouseout ：当鼠标离开时触发
</p>
<p>
  键盘事件
</p>
<p>
  onkeypress ：当键盘按下时触发
</p>
<p>
  onkeydown ：当键盘按下时触发
</p>
<p>
  onkeyup ：当键盘弹起时触发
</p>
<p>
  其他事件：
</p>
<p>
  onclick ： 单击事件
</p>
<p>
  onchange ： 改变选项时触发的事件（多用于select&gt;option）
</p>
<p>
  onresize：当窗口改变大小时触发的事件
</p>
<p>
  onscroll：当滚动条滚动时，触发的事件
</p>
<p>
  onsubmit：当表单提交时触发的事件
</p>
<p>
  5、案例-点击页面中的li，能够显示它的下标
</p>
<p>
  先找到页面中的li，然后用循环的方式给每个li都绑定一个单击事件
</p>
<p>
  <img loading="lazy" decoding="async" width="876" height="375" src="/wp-content/uploads/2018/05/word-image-2852.png" class="wp-image-3233" srcset="/wp-content/uploads/2018/05/word-image-2852.png 876w, /wp-content/uploads/2018/05/word-image-2852-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2852-768x329.png 768w" sizes="(max-width: 876px) 100vw, 876px" />
</p>
<p>
  错误的输出方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="1099" height="398" src="/wp-content/uploads/2018/05/word-image-2853.png" class="wp-image-3234" srcset="/wp-content/uploads/2018/05/word-image-2853.png 1099w, /wp-content/uploads/2018/05/word-image-2853-300x109.png 300w, /wp-content/uploads/2018/05/word-image-2853-768x278.png 768w, /wp-content/uploads/2018/05/word-image-2853-1024x371.png 1024w" sizes="(max-width: 1099px) 100vw, 1099px" />
</p>
<p>
  正确的方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="987" height="261" src="/wp-content/uploads/2018/05/word-image-2854.png" class="wp-image-3235" srcset="/wp-content/uploads/2018/05/word-image-2854.png 987w, /wp-content/uploads/2018/05/word-image-2854-300x79.png 300w, /wp-content/uploads/2018/05/word-image-2854-768x203.png 768w" sizes="(max-width: 987px) 100vw, 987px" />
</p>
<h1>七、案例—标签页效果</h1>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3183.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（二）事件、JS闭包、DOM</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:56:20 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JS闭包]]></category>
		<category><![CDATA[事件]]></category>
		<guid isPermaLink="false">/?p=3136</guid>

					<description><![CDATA[JavaScript高级（2） 目录 一、回顾与加强 1、JavaScript错误类型及特点 1、编译类型的错 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（2）
</p>
<p>
  目录
</p>
<h1>一、回顾与加强</h1>
<p>
  1、JavaScript错误类型及特点
</p>
<p>
  1、编译类型的错误
</p>
<p>
  编译错误就是语法错误。
</p>
<p>
  <img loading="lazy" decoding="async" width="1017" height="238" src="/wp-content/uploads/2018/05/word-image-2758.png" class="wp-image-3137" srcset="/wp-content/uploads/2018/05/word-image-2758.png 1017w, /wp-content/uploads/2018/05/word-image-2758-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2758-768x180.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" />
</p>
<p>
  2、执行错误
</p>
<p>
  语法上没有错误，结合上下午出现的错误，比如调用了一个不存在的变量或函数等。
</p>
<p>
  <img loading="lazy" decoding="async" width="1056" height="252" src="/wp-content/uploads/2018/05/word-image-2759.png" class="wp-image-3138" srcset="/wp-content/uploads/2018/05/word-image-2759.png 1056w, /wp-content/uploads/2018/05/word-image-2759-300x72.png 300w, /wp-content/uploads/2018/05/word-image-2759-768x183.png 768w, /wp-content/uploads/2018/05/word-image-2759-1024x244.png 1024w" sizes="(max-width: 1056px) 100vw, 1056px" />
</p>
<p>
  2、事件
</p>
<p>
  1、事件驱动式
</p>
<p>
  事件驱动式由：用户的行为+JavaScript引擎捕获用户的行为+<strong>调用处理函数</strong>。实际上就是一个事件的组成。
</p>
<p>
  2、事件处理函数的绑定与执行
</p>
<p>
  ①、行内绑定
</p>
<p>
  在HTML标签内指定事件并写处理程序。
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="245" src="/wp-content/uploads/2018/05/word-image-2760.png" class="wp-image-3139" srcset="/wp-content/uploads/2018/05/word-image-2760.png 847w, /wp-content/uploads/2018/05/word-image-2760-300x87.png 300w, /wp-content/uploads/2018/05/word-image-2760-768x222.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<p>
  ②、行内绑定—动态绑定
</p>
<p>
  如果事件的处理程序又大段的js代码，那么直接写到行内，肯定是不合理的，解决的办法是将大段的js代码封装成函数，然后触发事件的时候，调用这个函数。
</p>
<p>
  <img loading="lazy" decoding="async" width="910" height="279" src="/wp-content/uploads/2018/05/word-image-2761.png" class="wp-image-3140" srcset="/wp-content/uploads/2018/05/word-image-2761.png 910w, /wp-content/uploads/2018/05/word-image-2761-300x92.png 300w, /wp-content/uploads/2018/05/word-image-2761-768x235.png 768w" sizes="(max-width: 910px) 100vw, 910px" />
</p>
<p>
  ③、动态绑定
</p>
<p>
  通过获取元素（标签、节点）的dom对象，然后给dom对象绑定事件的方式来实现事件的绑定。
</p>
<p>
  <img loading="lazy" decoding="async" width="858" height="224" src="/wp-content/uploads/2018/05/word-image-2762.png" class="wp-image-3141" srcset="/wp-content/uploads/2018/05/word-image-2762.png 858w, /wp-content/uploads/2018/05/word-image-2762-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2762-768x201.png 768w" sizes="(max-width: 858px) 100vw, 858px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1051" height="377" src="/wp-content/uploads/2018/05/word-image-2763.png" class="wp-image-3142" srcset="/wp-content/uploads/2018/05/word-image-2763.png 1051w, /wp-content/uploads/2018/05/word-image-2763-300x108.png 300w, /wp-content/uploads/2018/05/word-image-2763-768x275.png 768w, /wp-content/uploads/2018/05/word-image-2763-1024x367.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" />
</p>
<p>
  3、在事件处理程序中，this分别表示什么
</p>
<p>
  ①、行内绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="594" height="31" src="/wp-content/uploads/2018/05/word-image-2764.png" class="wp-image-3143" srcset="/wp-content/uploads/2018/05/word-image-2764.png 594w, /wp-content/uploads/2018/05/word-image-2764-300x16.png 300w" sizes="(max-width: 594px) 100vw, 594px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="645" height="242" src="/wp-content/uploads/2018/05/word-image-2765.png" class="wp-image-3144" srcset="/wp-content/uploads/2018/05/word-image-2765.png 645w, /wp-content/uploads/2018/05/word-image-2765-300x113.png 300w" sizes="(max-width: 645px) 100vw, 645px" />
</p>
<p>
  ②、行内绑定—动态执行
</p>
<p>
  <img loading="lazy" decoding="async" width="1026" height="277" src="/wp-content/uploads/2018/05/word-image-2766.png" class="wp-image-3145" srcset="/wp-content/uploads/2018/05/word-image-2766.png 1026w, /wp-content/uploads/2018/05/word-image-2766-300x81.png 300w, /wp-content/uploads/2018/05/word-image-2766-768x207.png 768w, /wp-content/uploads/2018/05/word-image-2766-1024x276.png 1024w" sizes="(max-width: 1026px) 100vw, 1026px" />
</p>
<p>
  ③、动态绑定
</p>
<p>
  <img loading="lazy" decoding="async" width="1022" height="262" src="/wp-content/uploads/2018/05/word-image-2767.png" class="wp-image-3146" srcset="/wp-content/uploads/2018/05/word-image-2767.png 1022w, /wp-content/uploads/2018/05/word-image-2767-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2767-768x197.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" />
</p>
<h1>二、闭包</h1>
<p>
  1、概念
</p>
<p>
  闭包，指的是词法表示包括不被计算的变量的函数，也就是说，函数可以使用函数之外定义的变量。
</p>
<p>
  2、特点（作用）
</p>
<p>
  1、和作用域的特定一致
</p>
<p>
  可以在函数内部使用函数外部的变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="706" height="183" src="/wp-content/uploads/2018/05/word-image-2768.png" class="wp-image-3147" srcset="/wp-content/uploads/2018/05/word-image-2768.png 706w, /wp-content/uploads/2018/05/word-image-2768-300x78.png 300w" sizes="(max-width: 706px) 100vw, 706px" />
</p>
<p>
  2、使用闭包，内存不会释放
</p>
<p>
  <img loading="lazy" decoding="async" width="820" height="309" src="/wp-content/uploads/2018/05/word-image-2769.png" class="wp-image-3148" srcset="/wp-content/uploads/2018/05/word-image-2769.png 820w, /wp-content/uploads/2018/05/word-image-2769-300x113.png 300w, /wp-content/uploads/2018/05/word-image-2769-768x289.png 768w" sizes="(max-width: 820px) 100vw, 820px" />
</p>
<p>
  3、案例
</p>
<p>
  1、点击页面中的三个li标签，能够正常输出li的下标
</p>
<p>
  <img loading="lazy" decoding="async" width="1127" height="451" src="/wp-content/uploads/2018/05/word-image-2770.png" class="wp-image-3149" srcset="/wp-content/uploads/2018/05/word-image-2770.png 1127w, /wp-content/uploads/2018/05/word-image-2770-300x120.png 300w, /wp-content/uploads/2018/05/word-image-2770-768x307.png 768w, /wp-content/uploads/2018/05/word-image-2770-1024x410.png 1024w" sizes="(max-width: 1127px) 100vw, 1127px" />
</p>
<p>
  上面案例的另一种写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="820" height="379" src="/wp-content/uploads/2018/05/word-image-2771.png" class="wp-image-3150" srcset="/wp-content/uploads/2018/05/word-image-2771.png 820w, /wp-content/uploads/2018/05/word-image-2771-300x139.png 300w, /wp-content/uploads/2018/05/word-image-2771-768x355.png 768w" sizes="(max-width: 820px) 100vw, 820px" />
</p>
<p>
  2、页面刷新后，每隔1秒分别输出1/2/3/4/5
</p>
<p>
  <img loading="lazy" decoding="async" width="838" height="416" src="/wp-content/uploads/2018/05/word-image-2772.png" class="wp-image-3151" srcset="/wp-content/uploads/2018/05/word-image-2772.png 838w, /wp-content/uploads/2018/05/word-image-2772-300x149.png 300w, /wp-content/uploads/2018/05/word-image-2772-768x381.png 768w" sizes="(max-width: 838px) 100vw, 838px" />
</p>
<h1>三、DOM</h1>
<p>
  1、什么是DOM
</p>
<p>
  DOM全称是Document Object Model（文档对象模型），它是JS将HTML按文档结构和内容层次抽象出的模型，使得JS有了访问HTML的能力，能够实现对HTML中内容的操作。DOM存在广泛，PHP以及其他语言也有各自的DOM模型。
</p>
<p>
  DOM模型呈现树状结构，因此也叫“树模型”，树中的内容（标签、属性、文本）称为“节点”，包含有元素节点（标签）、属性节点、文本节点。每个节点，都是一个dom节点对象。
</p>
<p>
  2、节点与DOM模型
</p>
<p>
  <img loading="lazy" decoding="async" width="515" height="276" src="/wp-content/uploads/2018/05/word-image-2773.png" class="wp-image-3152" srcset="/wp-content/uploads/2018/05/word-image-2773.png 515w, /wp-content/uploads/2018/05/word-image-2773-300x161.png 300w" sizes="(max-width: 515px) 100vw, 515px" />
</p>
<p>
  根据 W3C 的 HTML DOM 标准，HTML 文档中的所有内容都是节点：
</p>
<p>
  整个文档是一个文档节点，用document对象表示
</p>
<p>
  每个 HTML 元素是元素节点，比如html、head、body、a、h1
</p>
<p>
  HTML 元素内的文本是文本节点
</p>
<p>
  每个 HTML 属性是属性节点，比如href
</p>
<p>
  注释是注释节点
</p>
<p>
  3、节点之间的关系
</p>
<p>
  <img loading="lazy" decoding="async" width="383" height="259" src="/wp-content/uploads/2018/05/word-image-2774.png" class="wp-image-3153" srcset="/wp-content/uploads/2018/05/word-image-2774.png 383w, /wp-content/uploads/2018/05/word-image-2774-300x203.png 300w, /wp-content/uploads/2018/05/word-image-2774-220x150.png 220w" sizes="(max-width: 383px) 100vw, 383px" />
</p>
<p>
  4、元素节点查询操作
</p>
<p>
  1、基于文档（document）查询
</p>
<p>
  document.getElementById(元素id);   //得到一个dom对象
</p>
<p>
  document.getElementsByTagName(标签名); //得到的是一个数组，数组的每个单元是一个dom对象
</p>
<p>
  前面这两种方法推荐使用，因为兼容性好。
</p>
<p>
  document.getElementsByClassName(类名);  //IE8+支持，就是从IE9支持 得到的是一个数组，数组的每个单元是一个dom对象
</p>
<p>
  document.getElementsByName(元素的name属性); //得到的是一个数组
</p>
<p>
  //h5中提供的方法
</p>
<p>
  document.querySelector(css选择器); //IE7+支持  得到的是一个dom对象
</p>
<p>
  document.querySelectorAll(css选择器); //IE7+支持  得到的是一个数组
</p>
<p>
  测试的html：
</p>
<p>
  <img loading="lazy" decoding="async" width="623" height="203" src="/wp-content/uploads/2018/05/word-image-2775.png" class="wp-image-3154" srcset="/wp-content/uploads/2018/05/word-image-2775.png 623w, /wp-content/uploads/2018/05/word-image-2775-300x98.png 300w" sizes="(max-width: 623px) 100vw, 623px" />
</p>
<p>
  js代码及效果：
</p>
<p>
  <img loading="lazy" decoding="async" width="1291" height="392" src="/wp-content/uploads/2018/05/word-image-2776.png" class="wp-image-3155" srcset="/wp-content/uploads/2018/05/word-image-2776.png 1291w, /wp-content/uploads/2018/05/word-image-2776-300x91.png 300w, /wp-content/uploads/2018/05/word-image-2776-768x233.png 768w, /wp-content/uploads/2018/05/word-image-2776-1024x311.png 1024w" sizes="(max-width: 1291px) 100vw, 1291px" />
</p>
<p>
  2、相互关系查询
</p>
<p>
  ①、根据父节点查找子节点
</p>
<p>
  <img loading="lazy" decoding="async" width="750" height="505" src="/wp-content/uploads/2018/05/word-image-2777.png" class="wp-image-3156" srcset="/wp-content/uploads/2018/05/word-image-2777.png 750w, /wp-content/uploads/2018/05/word-image-2777-300x202.png 300w" sizes="(max-width: 750px) 100vw, 750px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1017" height="308" src="/wp-content/uploads/2018/05/word-image-2778.png" class="wp-image-3157" srcset="/wp-content/uploads/2018/05/word-image-2778.png 1017w, /wp-content/uploads/2018/05/word-image-2778-300x91.png 300w, /wp-content/uploads/2018/05/word-image-2778-768x233.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="1055" height="288" src="/wp-content/uploads/2018/05/word-image-2779.png" class="wp-image-3158" srcset="/wp-content/uploads/2018/05/word-image-2779.png 1055w, /wp-content/uploads/2018/05/word-image-2779-300x82.png 300w, /wp-content/uploads/2018/05/word-image-2779-768x210.png 768w, /wp-content/uploads/2018/05/word-image-2779-1024x280.png 1024w" sizes="(max-width: 1055px) 100vw, 1055px" />
</p>
<p>
  ②、根据子节点查父节点
</p>
<p>
  <img loading="lazy" decoding="async" width="1096" height="258" src="/wp-content/uploads/2018/05/word-image-2780.png" class="wp-image-3159" srcset="/wp-content/uploads/2018/05/word-image-2780.png 1096w, /wp-content/uploads/2018/05/word-image-2780-300x71.png 300w, /wp-content/uploads/2018/05/word-image-2780-768x181.png 768w, /wp-content/uploads/2018/05/word-image-2780-1024x241.png 1024w" sizes="(max-width: 1096px) 100vw, 1096px" />
</p>
<p>
  ③、查询兄弟节点
</p>
<p>
  <img loading="lazy" decoding="async" width="1075" height="250" src="/wp-content/uploads/2018/05/word-image-2781.png" class="wp-image-3160" srcset="/wp-content/uploads/2018/05/word-image-2781.png 1075w, /wp-content/uploads/2018/05/word-image-2781-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2781-768x179.png 768w, /wp-content/uploads/2018/05/word-image-2781-1024x238.png 1024w" sizes="(max-width: 1075px) 100vw, 1075px" />
</p>
<p>
  3、遗留DOM
</p>
<p>
  早期DOM访问形式，在一些特定元素的获取上比较方便。被保留下来使用，W3C标准化之后 称为“0级DOM”。
</p>
<p>
  document.body			访问body节点
</p>
<p>
  document.forms		    访问所有的表单		返回集合
</p>
<p>
  document.formName[index].name       访问表单项
</p>
<p>
  document.anchors		    访问所有的锚点		返回集合
</p>
<p>
  document.links		    访问所有的链接		返回集合
</p>
<p>
  document.images		    访问所有的图片		返回集合
</p>
<p>
  document.all			    访问所有的元素
</p>
<p>
  <img loading="lazy" decoding="async" width="1158" height="459" src="/wp-content/uploads/2018/05/word-image-2782.png" class="wp-image-3161" srcset="/wp-content/uploads/2018/05/word-image-2782.png 1158w, /wp-content/uploads/2018/05/word-image-2782-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2782-768x304.png 768w, /wp-content/uploads/2018/05/word-image-2782-1024x406.png 1024w" sizes="(max-width: 1158px) 100vw, 1158px" />
</p>
<p>
  5、元素节点增删改操作
</p>
<p>
  1、增加元素节点/创建节点
</p>
<p>
  方法一：父节点.appendChild(子节点)
</p>
<p>
  <img loading="lazy" decoding="async" width="1079" height="443" src="/wp-content/uploads/2018/05/word-image-2783.png" class="wp-image-3162" srcset="/wp-content/uploads/2018/05/word-image-2783.png 1079w, /wp-content/uploads/2018/05/word-image-2783-300x123.png 300w, /wp-content/uploads/2018/05/word-image-2783-768x315.png 768w, /wp-content/uploads/2018/05/word-image-2783-1024x420.png 1024w" sizes="(max-width: 1079px) 100vw, 1079px" />
</p>
<p>
  方法二：父节点.insertBefore(新节点, 参照的节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="1063" height="423" src="/wp-content/uploads/2018/05/word-image-2784.png" class="wp-image-3163" srcset="/wp-content/uploads/2018/05/word-image-2784.png 1063w, /wp-content/uploads/2018/05/word-image-2784-300x119.png 300w, /wp-content/uploads/2018/05/word-image-2784-768x306.png 768w, /wp-content/uploads/2018/05/word-image-2784-1024x407.png 1024w" sizes="(max-width: 1063px) 100vw, 1063px" />
</p>
<p>
  2、修改节点
</p>
<p>
  方法：父节点.replaceChild(新节点, 待替换的节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="1046" height="419" src="/wp-content/uploads/2018/05/word-image-2785.png" class="wp-image-3164" srcset="/wp-content/uploads/2018/05/word-image-2785.png 1046w, /wp-content/uploads/2018/05/word-image-2785-300x120.png 300w, /wp-content/uploads/2018/05/word-image-2785-768x308.png 768w, /wp-content/uploads/2018/05/word-image-2785-1024x410.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" />
</p>
<p>
  3、删除节点
</p>
<p>
  方法：父节点.removeChild(子节点);
</p>
<p>
  <img loading="lazy" decoding="async" width="944" height="312" src="/wp-content/uploads/2018/05/word-image-2786.png" class="wp-image-3165" srcset="/wp-content/uploads/2018/05/word-image-2786.png 944w, /wp-content/uploads/2018/05/word-image-2786-300x99.png 300w, /wp-content/uploads/2018/05/word-image-2786-768x254.png 768w" sizes="(max-width: 944px) 100vw, 944px" />
</p>
<p>
  6、属性节点操作
</p>
<p>
  1、获取元素的属性
</p>
<p>
  elementNode.attributes         获取元素的所有属性
</p>
<p>
  elementNode.getAttribute()		读取一个属性值
</p>
<p>
  elementNode.属性名          获取元素的属性
</p>
<p>
  <img loading="lazy" decoding="async" width="1098" height="432" src="/wp-content/uploads/2018/05/word-image-2787.png" class="wp-image-3166" srcset="/wp-content/uploads/2018/05/word-image-2787.png 1098w, /wp-content/uploads/2018/05/word-image-2787-300x118.png 300w, /wp-content/uploads/2018/05/word-image-2787-768x302.png 768w, /wp-content/uploads/2018/05/word-image-2787-1024x403.png 1024w" sizes="(max-width: 1098px) 100vw, 1098px" />
</p>
<p>
  2、添加/修改元素的属性
</p>
<p>
  elementNode.setAttribute()		设置（修改/添加）一个属性值
</p>
<p>
  elementNode.属性名 = 值     设置元素的属性
</p>
<p>
  <img loading="lazy" decoding="async" width="932" height="237" src="/wp-content/uploads/2018/05/word-image-2788.png" class="wp-image-3167" srcset="/wp-content/uploads/2018/05/word-image-2788.png 932w, /wp-content/uploads/2018/05/word-image-2788-300x76.png 300w, /wp-content/uploads/2018/05/word-image-2788-768x195.png 768w" sizes="(max-width: 932px) 100vw, 932px" />
</p>
<p>
  3、删除元素的属性
</p>
<p>
  elementNode.removeAttribute()	删除一个属性
</p>
<p>
  4、判断元素是否有哪个属性
</p>
<p>
  elementNode.hasAttribute()		检测是否有某个属性，有返回true，没有返回false
</p>
<p>
  <img loading="lazy" decoding="async" width="959" height="224" src="/wp-content/uploads/2018/05/word-image-2789.png" class="wp-image-3168" srcset="/wp-content/uploads/2018/05/word-image-2789.png 959w, /wp-content/uploads/2018/05/word-image-2789-300x70.png 300w, /wp-content/uploads/2018/05/word-image-2789-768x179.png 768w" sizes="(max-width: 959px) 100vw, 959px" />
</p>
<p>
  5、案例&#8212;全选，反选，取消
</p>
<p>
  代码见19全选反选取消.html
</p>
<p>
  7、操作css样式
</p>
<p>
  1、设置css样式：
</p>
<p>
  语法： node<strong>.</strong>style<strong>.</strong>css样式 = 值
</p>
<p>
  不带中横线的css：node.style.样式 = 值。比如有color，border，width
</p>
<p>
  带中横线的，样式要去掉中横线，后面的首字母大写，backgroundColor、fontSize、lineHeight
</p>
<p>
  <img loading="lazy" decoding="async" width="705" height="465" src="/wp-content/uploads/2018/05/word-image-2790.png" class="wp-image-3169" srcset="/wp-content/uploads/2018/05/word-image-2790.png 705w, /wp-content/uploads/2018/05/word-image-2790-300x198.png 300w" sizes="(max-width: 705px) 100vw, 705px" />
</p>
<p>
  2、获取css样式
</p>
<p>
  使用node.style.样式的方式只能获取行内样式和js已经设置过的样式。
</p>
<p>
  在IE8及更低版本浏览器中支持node.currentStyle.样式
</p>
<p>
  高版本浏览器支持getComputedStyle(node).样式
</p>
<p>
  <img loading="lazy" decoding="async" width="967" height="177" src="/wp-content/uploads/2018/05/word-image-2791.png" class="wp-image-3170" srcset="/wp-content/uploads/2018/05/word-image-2791.png 967w, /wp-content/uploads/2018/05/word-image-2791-300x55.png 300w, /wp-content/uploads/2018/05/word-image-2791-768x141.png 768w" sizes="(max-width: 967px) 100vw, 967px" />
</p>
<p>
  兼容的性的写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="806" height="228" src="/wp-content/uploads/2018/05/word-image-2792.png" class="wp-image-3171" srcset="/wp-content/uploads/2018/05/word-image-2792.png 806w, /wp-content/uploads/2018/05/word-image-2792-300x85.png 300w, /wp-content/uploads/2018/05/word-image-2792-768x217.png 768w" sizes="(max-width: 806px) 100vw, 806px" />
</p>
<p>
  8、DOM属性
</p>
<p>
  DOM有四个属性，分别是：
</p>
<p><strong>innerHTML</strong>
</p>
<p>
  	获取/设置元素里的html内容
</p>
<p>
  <img loading="lazy" decoding="async" width="1275" height="264" src="/wp-content/uploads/2018/05/word-image-2793.png" class="wp-image-3172" srcset="/wp-content/uploads/2018/05/word-image-2793.png 1275w, /wp-content/uploads/2018/05/word-image-2793-300x62.png 300w, /wp-content/uploads/2018/05/word-image-2793-768x159.png 768w, /wp-content/uploads/2018/05/word-image-2793-1024x212.png 1024w" sizes="(max-width: 1275px) 100vw, 1275px" />
</p>
<p><strong>nodeName</strong>
</p>
<p>
  	nodeName 是只读的
</p>
<p>
  元素节点的 nodeName 与标签名相同
</p>
<p>
  属性节点的 nodeName 与属性名相同
</p>
<p>
  文本节点的 nodeName 始终是 #text
</p>
<p>
  文档节点的 nodeName 始终是 #document
</p>
<p><strong>nodeValue</strong>
</p>
<p>
  	元素节点的 nodeValue 是 undefined 或 null
</p>
<p>
  文本节点的 nodeValue 是文本本身
</p>
<p>
  属性节点的 nodeValue 是属性值
</p>
<p>
  <img loading="lazy" decoding="async" width="847" height="152" src="/wp-content/uploads/2018/05/word-image-2794.png" class="wp-image-3173" srcset="/wp-content/uploads/2018/05/word-image-2794.png 847w, /wp-content/uploads/2018/05/word-image-2794-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2794-768x138.png 768w" sizes="(max-width: 847px) 100vw, 847px" />
</p>
<p><strong>nodeType</strong>
</p>
<p>
  表示节点的类型
</p>
<p>
  	元素 1
</p>
<p>
  属性 2
</p>
<p>
  文本 3
</p>
<p>
  注释 8
</p>
<p>
  文档 9
</p>
<p>
  <img loading="lazy" decoding="async" width="1211" height="400" src="/wp-content/uploads/2018/05/word-image-2795.png" class="wp-image-3174" srcset="/wp-content/uploads/2018/05/word-image-2795.png 1211w, /wp-content/uploads/2018/05/word-image-2795-300x99.png 300w, /wp-content/uploads/2018/05/word-image-2795-768x254.png 768w, /wp-content/uploads/2018/05/word-image-2795-1024x338.png 1024w" sizes="(max-width: 1211px) 100vw, 1211px" />
</p>
<p>
  案例：完成兼容性的查找子节点的方法，及查找上一个兄弟的方法，及查找下一个兄弟的方法
</p>
<p>
  获取子元素的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="738" height="502" src="/wp-content/uploads/2018/05/word-image-2796.png" class="wp-image-3175" srcset="/wp-content/uploads/2018/05/word-image-2796.png 738w, /wp-content/uploads/2018/05/word-image-2796-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2796-220x150.png 220w" sizes="(max-width: 738px) 100vw, 738px" />
</p>
<p>
  获取上一个兄弟的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="380" src="/wp-content/uploads/2018/05/word-image-2797.png" class="wp-image-3176" srcset="/wp-content/uploads/2018/05/word-image-2797.png 716w, /wp-content/uploads/2018/05/word-image-2797-300x159.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<p>
  获取下一个兄弟的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="353" src="/wp-content/uploads/2018/05/word-image-2798.png" class="wp-image-3177" srcset="/wp-content/uploads/2018/05/word-image-2798.png 757w, /wp-content/uploads/2018/05/word-image-2798-300x140.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<p>
  9、获取元素的位置
</p>
<p>
  offsetLeft	  元素在网页中水平坐标值	ele.offsetLeft
</p>
<p>
  offsetTop	  元素在网页中垂直坐标值	ele.offsetTop
</p>
<p>
  offsetWidth	元素在页面中占据的宽度	ele.offsetWidth
</p>
<p>
  offsetHeight	元素在页面中占据的高度	ele. offsetHeight
</p>
<p>
  HTML+css：
</p>
<p>
  <img loading="lazy" decoding="async" width="639" height="424" src="/wp-content/uploads/2018/05/word-image-2799.png" class="wp-image-3178" srcset="/wp-content/uploads/2018/05/word-image-2799.png 639w, /wp-content/uploads/2018/05/word-image-2799-300x199.png 300w" sizes="(max-width: 639px) 100vw, 639px" />
</p>
<p>
  js及输出结果：
</p>
<p>
  <img loading="lazy" decoding="async" width="1256" height="251" src="/wp-content/uploads/2018/05/word-image-2800.png" class="wp-image-3179" srcset="/wp-content/uploads/2018/05/word-image-2800.png 1256w, /wp-content/uploads/2018/05/word-image-2800-300x60.png 300w, /wp-content/uploads/2018/05/word-image-2800-768x153.png 768w, /wp-content/uploads/2018/05/word-image-2800-1024x205.png 1024w" sizes="(max-width: 1256px) 100vw, 1256px" />
</p>
<p>
  scrollLeft	  滚动条在容器中水平滚动的距离	ele.scrollLeft
</p>
<p>
  scrollTop	  滚动条在容器中垂直滚动的距离	ele.scrollTop
</p>
<p>
  测试的时候，先将页面设置的大一点，能看到滚动条：
</p>
<p>
  <img loading="lazy" decoding="async" width="566" height="31" src="/wp-content/uploads/2018/05/word-image-2801.png" class="wp-image-3180" srcset="/wp-content/uploads/2018/05/word-image-2801.png 566w, /wp-content/uploads/2018/05/word-image-2801-300x16.png 300w" sizes="(max-width: 566px) 100vw, 566px" />
</p>
<p>
  当滚动条滚动的时候，输出滚动的距离：
</p>
<p>
  <img loading="lazy" decoding="async" width="858" height="132" src="/wp-content/uploads/2018/05/word-image-2802.png" class="wp-image-3181" srcset="/wp-content/uploads/2018/05/word-image-2802.png 858w, /wp-content/uploads/2018/05/word-image-2802-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2802-768x118.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3136.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（三）Json、淡入、事件、冒泡事件、可编辑表格、内置对象</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:53:28 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[事件]]></category>
		<category><![CDATA[内置对象]]></category>
		<category><![CDATA[冒泡事件]]></category>
		<category><![CDATA[可编辑表格]]></category>
		<category><![CDATA[淡入]]></category>
		<guid isPermaLink="false">/?p=3098</guid>

					<description><![CDATA[JavaScript高级（3） 0、知识点补充 查找节点： firstChild lastChild：会把空白 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript高级（3）
</p>
<h1>0、知识点补充</h1>
<p>
  查找节点：
</p>
<p>
  firstChild  lastChild：会把空白计算在内
</p>
<p>
  firstElementChild  lastElementChild ：只查找元素类型的子节点，不会计算空白，但是在IE8+才支持
</p>
<p>
  <img loading="lazy" decoding="async" width="1105" height="309" src="/wp-content/uploads/2018/05/word-image-2722.png" class="wp-image-3099" srcset="/wp-content/uploads/2018/05/word-image-2722.png 1105w, /wp-content/uploads/2018/05/word-image-2722-300x84.png 300w, /wp-content/uploads/2018/05/word-image-2722-768x215.png 768w, /wp-content/uploads/2018/05/word-image-2722-1024x286.png 1024w" sizes="(max-width: 1105px) 100vw, 1105px" />
</p>
<p>
  克隆节点：cloneNode()
</p>
<p>
  <img loading="lazy" decoding="async" width="1144" height="403" src="/wp-content/uploads/2018/05/word-image-2723.png" class="wp-image-3100" srcset="/wp-content/uploads/2018/05/word-image-2723.png 1144w, /wp-content/uploads/2018/05/word-image-2723-300x106.png 300w, /wp-content/uploads/2018/05/word-image-2723-768x271.png 768w, /wp-content/uploads/2018/05/word-image-2723-1024x361.png 1024w" sizes="(max-width: 1144px) 100vw, 1144px" />
</p>
<h1>一、案例—淡入效果</h1>
<p>
  1、做默认的html+css
</p>
<p>
  <img loading="lazy" decoding="async" width="631" height="564" src="/wp-content/uploads/2018/05/word-image-2724.png" class="wp-image-3101" srcset="/wp-content/uploads/2018/05/word-image-2724.png 631w, /wp-content/uploads/2018/05/word-image-2724-300x268.png 300w" sizes="(max-width: 631px) 100vw, 631px" />
</p>
<p>
  2、每隔两秒生硬的变化
</p>
<p>
  <img loading="lazy" decoding="async" width="674" height="313" src="/wp-content/uploads/2018/05/word-image-2725.png" class="wp-image-3102" srcset="/wp-content/uploads/2018/05/word-image-2725.png 674w, /wp-content/uploads/2018/05/word-image-2725-300x139.png 300w" sizes="(max-width: 674px) 100vw, 674px" />
</p>
<p>
  加入临界条件，控制inIndex和outIndex的范围：
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="418" src="/wp-content/uploads/2018/05/word-image-2726.png" class="wp-image-3103" srcset="/wp-content/uploads/2018/05/word-image-2726.png 728w, /wp-content/uploads/2018/05/word-image-2726-300x172.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  3、创建一个设置透明图的方法
</p>
<p>
  <img loading="lazy" decoding="async" width="752" height="229" src="/wp-content/uploads/2018/05/word-image-2727.png" class="wp-image-3104" srcset="/wp-content/uploads/2018/05/word-image-2727.png 752w, /wp-content/uploads/2018/05/word-image-2727-300x91.png 300w" sizes="(max-width: 752px) 100vw, 752px" />
</p>
<p>
  4、让图片慢慢变化
</p>
<p>
  <img loading="lazy" decoding="async" width="822" height="560" src="/wp-content/uploads/2018/05/word-image-2728.png" class="wp-image-3105" srcset="/wp-content/uploads/2018/05/word-image-2728.png 822w, /wp-content/uploads/2018/05/word-image-2728-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2728-768x523.png 768w, /wp-content/uploads/2018/05/word-image-2728-220x150.png 220w" sizes="(max-width: 822px) 100vw, 822px" />
</p>
<p>
  5、解决变化过程中，最后一张总是显示的问题
</p>
<p>
  变化过程中，待显示的图片的透明度还没有达到1，也就是半透明状态，而其他图片的z-index值又都为1，z-index值相同的话，默认总是显示最后一张。
</p>
<p>
  解决的办法，变化这一刻（在变化的1秒钟之内），待显示的图片的z-index设置为3，其他的图片的z-index的值设置为1，让待隐藏的图片的z-index值为2.
</p>
<p>
  <img loading="lazy" decoding="async" width="1089" height="625" src="/wp-content/uploads/2018/05/word-image-2729.png" class="wp-image-3106" srcset="/wp-content/uploads/2018/05/word-image-2729.png 1089w, /wp-content/uploads/2018/05/word-image-2729-300x172.png 300w, /wp-content/uploads/2018/05/word-image-2729-768x441.png 768w, /wp-content/uploads/2018/05/word-image-2729-1024x588.png 1024w" sizes="(max-width: 1089px) 100vw, 1089px" />
</p>
<h1><a id="post-3098-_Toc488784655"></a>二、事件与事件对象</h1>
<p><a id="post-3098-_Toc488784656"></a><br />
  1、事件监听与移除事件监听
</p>
<p>
  事件监听要解决的问是给一个dom对象绑定多个事件。
</p>
<p>
  1、事件监听
</p>
<p>
  针对IE8+及火狐浏览器，使用addEventLister()，在绑定事件的时候，不要写on。
</p>
<p>
  针对IE8及更低版本浏览器使用attachEvent()，绑定的事件倒序执行。
</p>
<p>
  <img loading="lazy" decoding="async" width="758" height="475" src="/wp-content/uploads/2018/05/word-image-2730.png" class="wp-image-3107" srcset="/wp-content/uploads/2018/05/word-image-2730.png 758w, /wp-content/uploads/2018/05/word-image-2730-300x188.png 300w" sizes="(max-width: 758px) 100vw, 758px" />
</p>
<p>
  写一个兼容性的函数：
</p>
<p>
  <img loading="lazy" decoding="async" width="714" height="330" src="/wp-content/uploads/2018/05/word-image-2731.png" class="wp-image-3108" srcset="/wp-content/uploads/2018/05/word-image-2731.png 714w, /wp-content/uploads/2018/05/word-image-2731-300x139.png 300w" sizes="(max-width: 714px) 100vw, 714px" />
</p>
<p>
  2、移除事件监听
</p>
<p>
  <img loading="lazy" decoding="async" width="821" height="552" src="/wp-content/uploads/2018/05/word-image-2732.png" class="wp-image-3109" srcset="/wp-content/uploads/2018/05/word-image-2732.png 821w, /wp-content/uploads/2018/05/word-image-2732-300x202.png 300w, /wp-content/uploads/2018/05/word-image-2732-768x516.png 768w" sizes="(max-width: 821px) 100vw, 821px" />
</p>
<p>
  兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="613" height="209" src="/wp-content/uploads/2018/05/word-image-2733.png" class="wp-image-3110" srcset="/wp-content/uploads/2018/05/word-image-2733.png 613w, /wp-content/uploads/2018/05/word-image-2733-300x102.png 300w" sizes="(max-width: 613px) 100vw, 613px" />
</p>
<p><a id="post-3098-_Toc488784657"></a><br />
  2、事件对象
</p>
<p>
  事件对象存在于事件处理函数中。
</p>
<p>
  事件对象就是描述当前事件的具体的情况的对象。这个对象根据事件的不同，内容可能会发生细微的变化，比如键盘事件，事件对象就会包括keyCode，比如单击事件，事件对象就会包含点击的坐标。
</p>
<p>
  获取事件对象的兼容性写法：
</p>
<p>
  <img loading="lazy" decoding="async" width="689" height="244" src="/wp-content/uploads/2018/05/word-image-2734.png" class="wp-image-3111" srcset="/wp-content/uploads/2018/05/word-image-2734.png 689w, /wp-content/uploads/2018/05/word-image-2734-300x106.png 300w" sizes="(max-width: 689px) 100vw, 689px" />
</p>
<p>
  shiftKey：表示是否按了shift键，如果按了返回true，没有按返回false
</p>
<p>
  ctrlKey：表示是否按了ctrl键，如果按了返回true，没有按返回false
</p>
<p>
  altKey：表示是否按了alt键，如果按了返回true，没有按返回false
</p>
<p>
  keyCode：表示键盘的代码，是一个数字，每个键都会对应一个数字。具体查看“键盘KeyCode对照表.docx”
</p>
<p>
  判断是否按了@键：
</p>
<p>
  <img loading="lazy" decoding="async" width="736" height="409" src="/wp-content/uploads/2018/05/word-image-2735.png" class="wp-image-3112" srcset="/wp-content/uploads/2018/05/word-image-2735.png 736w, /wp-content/uploads/2018/05/word-image-2735-300x167.png 300w" sizes="(max-width: 736px) 100vw, 736px" />
</p>
<p><a id="post-3098-_Toc488784658"></a><br />
  3、阻止冒泡事件
</p>
<p>
  1、什么是冒泡事件？
</p>
<p>
  <img loading="lazy" decoding="async" width="962" height="356" src="/wp-content/uploads/2018/05/word-image-2736.png" class="wp-image-3113" srcset="/wp-content/uploads/2018/05/word-image-2736.png 962w, /wp-content/uploads/2018/05/word-image-2736-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2736-768x284.png 768w" sizes="(max-width: 962px) 100vw, 962px" />
</p>
<p>
  在点击b这个div的时候，由于b在a的上面，也相当于点击了a。所以会触发两个事件，这种情况就是冒泡事件。
</p>
<p>
  2、如何阻止冒泡行为
</p>
<p>
  如果要阻止冒泡，
</p>
<p>
  标准浏览器使用evt.stopPropagation()
</p>
<p>
  IE内核浏览器使用window.event.cancelBubble = true;
</p>
<p>
  <img loading="lazy" decoding="async" width="569" height="491" src="/wp-content/uploads/2018/05/word-image-2737.png" class="wp-image-3114" srcset="/wp-content/uploads/2018/05/word-image-2737.png 569w, /wp-content/uploads/2018/05/word-image-2737-300x259.png 300w" sizes="(max-width: 569px) 100vw, 569px" />
</p>
<p><a id="post-3098-_Toc488784659"></a><br />
  4、阻止默认行为
</p>
<p>
  比如表单提交或者超链接跳转，都会有一个地址，点击表单中的提交按钮或者超链接就会跳转到相应的地址。如果点击之后不希望这样跳转，就使用js方法阻止它，这就是阻止默认行为。
</p>
<p>
  <img loading="lazy" decoding="async" width="810" height="486" src="/wp-content/uploads/2018/05/word-image-2738.png" class="wp-image-3115" srcset="/wp-content/uploads/2018/05/word-image-2738.png 810w, /wp-content/uploads/2018/05/word-image-2738-300x180.png 300w, /wp-content/uploads/2018/05/word-image-2738-768x461.png 768w" sizes="(max-width: 810px) 100vw, 810px" />
</p>
<p>
  另外的方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="867" height="452" src="/wp-content/uploads/2018/05/word-image-2739.png" class="wp-image-3116" srcset="/wp-content/uploads/2018/05/word-image-2739.png 867w, /wp-content/uploads/2018/05/word-image-2739-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2739-768x400.png 768w" sizes="(max-width: 867px) 100vw, 867px" />
</p>
<h1>三、案例—可编辑的表格</h1>
<p>
  1、完成html+css布局
</p>
<p>
  <img loading="lazy" decoding="async" width="484" height="391" src="/wp-content/uploads/2018/05/word-image-2740.png" class="wp-image-3117" srcset="/wp-content/uploads/2018/05/word-image-2740.png 484w, /wp-content/uploads/2018/05/word-image-2740-300x242.png 300w" sizes="(max-width: 484px) 100vw, 484px" />
</p>
<p>
  css：
</p>
<p>
  <img loading="lazy" decoding="async" width="644" height="437" src="/wp-content/uploads/2018/05/word-image-2741.png" class="wp-image-3118" srcset="/wp-content/uploads/2018/05/word-image-2741.png 644w, /wp-content/uploads/2018/05/word-image-2741-300x204.png 300w, /wp-content/uploads/2018/05/word-image-2741-220x150.png 220w" sizes="(max-width: 644px) 100vw, 644px" />
</p>
<p>
  2、隔行换色
</p>
<p>
  <img loading="lazy" decoding="async" width="637" height="160" src="/wp-content/uploads/2018/05/word-image-2742.png" class="wp-image-3119" srcset="/wp-content/uploads/2018/05/word-image-2742.png 637w, /wp-content/uploads/2018/05/word-image-2742-300x75.png 300w" sizes="(max-width: 637px) 100vw, 637px" />
</p>
<p>
  3、找到包括名字的td，并绑定单击事件
</p>
<p>
  <img loading="lazy" decoding="async" width="744" height="414" src="/wp-content/uploads/2018/05/word-image-2743.png" class="wp-image-3120" srcset="/wp-content/uploads/2018/05/word-image-2743.png 744w, /wp-content/uploads/2018/05/word-image-2743-300x167.png 300w" sizes="(max-width: 744px) 100vw, 744px" />
</p>
<p>
  4、点击td后，将input放到td中
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="359" src="/wp-content/uploads/2018/05/word-image-2744.png" class="wp-image-3121" srcset="/wp-content/uploads/2018/05/word-image-2744.png 728w, /wp-content/uploads/2018/05/word-image-2744-300x148.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  设置input的样式，阻止产生多个input
</p>
<p>
  <img loading="lazy" decoding="async" width="872" height="657" src="/wp-content/uploads/2018/05/word-image-2745.png" class="wp-image-3122" srcset="/wp-content/uploads/2018/05/word-image-2745.png 872w, /wp-content/uploads/2018/05/word-image-2745-300x226.png 300w, /wp-content/uploads/2018/05/word-image-2745-768x579.png 768w" sizes="(max-width: 872px) 100vw, 872px" />
</p>
<p>
  5、给input绑定事件
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="462" src="/wp-content/uploads/2018/05/word-image-2746.png" class="wp-image-3123" srcset="/wp-content/uploads/2018/05/word-image-2746.png 716w, /wp-content/uploads/2018/05/word-image-2746-300x194.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<h1>四、面向对象概述</h1>
<p>
  1、什么是对象
</p>
<p>
  我喜欢大眼睛，长头发，大长腿，小蛮腰，会洗衣服，会做饭，会生孩子的女孩。比如有孙俪，范冰冰。
</p>
<p>
  上面这句话中的“大眼睛，长头发，大长腿，小蛮腰，会洗衣服，会做饭，会生孩子”表示一类人，在程序中就是一个类。而孙俪，范冰冰是符合这类的人，在程序中就的对象。
</p>
<p>
  2、面向对象编程
</p>
<p>
  面向对象编程简称OOP（Object-Oritened Programming）为软件开发人员敞开了一扇大门，它使得代码的编写更加简洁、高效、可读性和维护性增强。它实现了软件工程的三大目标：（代码）重用性、（功能）扩展性和（操作）灵活性，它的实现是依赖于面向对象的三大特性：封装、继承、多态。在实际开发中 使用面向对象编程 可以实现系统化、模块化和结构化的设计 它是每位软件开发员不可或缺的一项技能。
</p>
<h1>五、自定义对象</h1>
<p>
  1、构造函数和类的说明
</p>
<p>
  PHP中要声明一个对象的话，必须先声明一个类，然后通过关键字new实例化得到一个对象。
</p>
<p>
  在js中，没有类的概念，只有构造函数的概念，js中会把构造函数当做类。
</p>
<p>
  在ES6（ECMAScript6）中才引入了类的概念。
</p>
<p>
  <img loading="lazy" decoding="async" width="595" height="179" src="/wp-content/uploads/2018/05/word-image-2747.png" class="wp-image-3124" srcset="/wp-content/uploads/2018/05/word-image-2747.png 595w, /wp-content/uploads/2018/05/word-image-2747-300x90.png 300w" sizes="(max-width: 595px) 100vw, 595px" />
</p>
<p>
  2、this关键字和成员
</p>
<p>
  <img loading="lazy" decoding="async" width="628" height="429" src="/wp-content/uploads/2018/05/word-image-2748.png" class="wp-image-3125" srcset="/wp-content/uploads/2018/05/word-image-2748.png 628w, /wp-content/uploads/2018/05/word-image-2748-300x205.png 300w, /wp-content/uploads/2018/05/word-image-2748-220x150.png 220w" sizes="(max-width: 628px) 100vw, 628px" />
</p>
<p>
  用this关键字，在构造函数中添加成员：<br />
  <br />
  <img loading="lazy" decoding="async" width="794" height="338" src="/wp-content/uploads/2018/05/word-image-2749.png" class="wp-image-3126" srcset="/wp-content/uploads/2018/05/word-image-2749.png 794w, /wp-content/uploads/2018/05/word-image-2749-300x128.png 300w, /wp-content/uploads/2018/05/word-image-2749-768x327.png 768w" sizes="(max-width: 794px) 100vw, 794px" />
</p>
<p>
  this表示根据Person实例化的每个对象。当前用的是哪个对象，this就表示哪个对象。
</p>
<p>
  3、删除成员
</p>
<p>
  使用的关键字是delete。delete关键字用于删除对象的成员，既可以删除成员属性，也可以删除成员方法。
</p>
<p>
  <img loading="lazy" decoding="async" width="633" height="382" src="/wp-content/uploads/2018/05/word-image-2750.png" class="wp-image-3127" srcset="/wp-content/uploads/2018/05/word-image-2750.png 633w, /wp-content/uploads/2018/05/word-image-2750-300x181.png 300w" sizes="(max-width: 633px) 100vw, 633px" />
</p>
<p>
  4、练习
</p>
<p>
  案例目的是设置dom对象的css样式：
</p>
<p>
  使用的办法不是直接设置，而是将设置dom对象css样式写到对象的成员方法中
</p>
<p>
  <img loading="lazy" decoding="async" width="716" height="371" src="/wp-content/uploads/2018/05/word-image-2751.png" class="wp-image-3128" srcset="/wp-content/uploads/2018/05/word-image-2751.png 716w, /wp-content/uploads/2018/05/word-image-2751-300x155.png 300w" sizes="(max-width: 716px) 100vw, 716px" />
</p>
<p>
  完成链式调用：
</p>
<p>
  <img loading="lazy" decoding="async" width="1032" height="383" src="/wp-content/uploads/2018/05/word-image-2752.png" class="wp-image-3129" srcset="/wp-content/uploads/2018/05/word-image-2752.png 1032w, /wp-content/uploads/2018/05/word-image-2752-300x111.png 300w, /wp-content/uploads/2018/05/word-image-2752-768x285.png 768w, /wp-content/uploads/2018/05/word-image-2752-1024x380.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" />
</p>
<p>
  5、自定义对象在内存中的表现形式
</p>
<p>
  创建一个对象后，会在内存中栈和堆都开辟一个新的空间，堆中存储的是对象的实际内容，栈区存放的是堆的地址。
</p>
<p>
  <img loading="lazy" decoding="async" width="798" height="282" src="/wp-content/uploads/2018/05/word-image-2753.png" class="wp-image-3130" srcset="/wp-content/uploads/2018/05/word-image-2753.png 798w, /wp-content/uploads/2018/05/word-image-2753-300x106.png 300w, /wp-content/uploads/2018/05/word-image-2753-768x271.png 768w" sizes="(max-width: 798px) 100vw, 798px" />
</p>
<p>
  删除其中一个对象，会不会对另外的对象有影响？
</p>
<p>
  <img loading="lazy" decoding="async" width="797" height="280" src="/wp-content/uploads/2018/05/word-image-2754.png" class="wp-image-3131" srcset="/wp-content/uploads/2018/05/word-image-2754.png 797w, /wp-content/uploads/2018/05/word-image-2754-300x105.png 300w, /wp-content/uploads/2018/05/word-image-2754-768x270.png 768w" sizes="(max-width: 797px) 100vw, 797px" />
</p>
<h1>六、json格式的对象</h1>
<p>
  1、json简介
</p>
<p>
  json就是符合某种格式的字符串。
</p>
<p>
  JavaScript 对象表示法（JavaScript Object Notation）。
</p>
<p>
  JSON 是存储和交换文本信息的语法。类似 XML。
</p>
<p>
  JSON 比 XML 更小、更快，更易解析
</p>
<p>
  JSON是独立于语言和平台的。所有的编程语言都认识JSON，这一点和XML一样。
</p>
<p>
  2、json格式
</p>
<p>
  有两种写法：
</p>
<p>
  ①：方括号在外层，和JavaScript中的数组格式一样。
</p>
<p>
  [&#8216;apple&#8217;, &#8216;banana&#8217;, &#8216;pear&#8217;, &#8216;orange&#8217;, &#8216;xigua&#8217;]
</p>
<p>
  [{id:1, name:&#8217;宋江&#8217;, nickname:&#8217;及时雨&#8217;}, {id:2, name:&#8217;卢俊义&#8217;, nickname:&#8217;玉麒麟&#8217;},{id:1, name:&#8217;林冲&#8217;, nickname:&#8217;豹子头&#8217;}]
</p>
<p>
  ②、大括号在外，和JavaScript中的对象格式一样。
</p>
<p>
  {键:值, 键:值, ….}
</p>
<p>
  {键:[], 键:[], …}
</p>
<p>
  只要是[]，就要符合中括号的语法（和数组写法一样）;
</p>
<p>
  只要是大括号，就要符合大括号的语法（键:值, …）
</p>
<p>
  3、json格式的对象
</p>
<p>
  我们最终要讨论的是JavaScript的对象写法，只不过这种写法和json的格式一样。
</p>
<p>
  <img loading="lazy" decoding="async" width="598" height="104" src="/wp-content/uploads/2018/05/word-image-2755.png" class="wp-image-3132" srcset="/wp-content/uploads/2018/05/word-image-2755.png 598w, /wp-content/uploads/2018/05/word-image-2755-300x52.png 300w" sizes="(max-width: 598px) 100vw, 598px" />
</p>
<p>
  成员属性和成员方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="711" height="420" src="/wp-content/uploads/2018/05/word-image-2756.png" class="wp-image-3133" srcset="/wp-content/uploads/2018/05/word-image-2756.png 711w, /wp-content/uploads/2018/05/word-image-2756-300x177.png 300w" sizes="(max-width: 711px) 100vw, 711px" />
</p>
<p>
  调用成员：
</p>
<p>
  <img loading="lazy" decoding="async" width="559" height="310" src="/wp-content/uploads/2018/05/word-image-2757.png" class="wp-image-3134" srcset="/wp-content/uploads/2018/05/word-image-2757.png 559w, /wp-content/uploads/2018/05/word-image-2757-300x166.png 300w" sizes="(max-width: 559px) 100vw, 559px" />
</p>
<h1>七、内置对象</h1>
<p>
  手册位置：上面的JavaScript—左侧的JavaScript—右侧的参考书
</p>
<p>
  1、Object
</p>
<p>
  2、String对象
</p>
<p>
  使用方法：
</p>
<p><strong>属性</strong>
</p>
<p>
  length：表示字符串的长度。
</p>
<p><strong>方法</strong>：
</p>
<p>
  indexOf() – 查找一个字符串是否存在，返回值是存在的位置（存在的情况），或-1（不存在）
</p>
<p>
  substr() – 截取字符串。两个参数，第一个参数表示起始位置可以是负数；第二个参数可选，表示长度，非负，不填表示到结尾
</p>
<p>
  substring() –截取字符串。两个参数，都是非负数。分别表示起始位置和结束位置，第二个参数不写表示到结尾
</p>
<p>
  slice() –截取字符串。两个参数，第一个表示起始位置，可以是负数。第二个是结尾位置。注意结尾位置不能在起始位置之前。
</p>
<p>
  split() – 将字符串分割成数组。两个参数，第一个表示分隔符，第二个可选表示数组的最大长度
</p>
<p>
  replace – 替换字符串中的值。两个参数，第一个表示查找的值，第二个表示替换后的值。
</p>
<p>
  3、Date对象
</p>
<p>
  使用方法，先new Date()，得到一个对象，然后用这个对象调用它里面的成员方法。
</p>
<p>
  4、Array对象
</p>
<p><strong>属性</strong>：
</p>
<p>
  length，表示数组元素个数
</p>
<p><strong>方法</strong>：
</p>
<p>
  concat()   连接两个或更多的数组，并返回结果。
</p>
<p>
  join()     把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
</p>
<p>
  pop()     删除并返回数组的最后一个元素
</p>
<p>
  push()    向数组的末尾添加一个或更多元素，并返回新的长度。
</p>
<p>
  reverse()  颠倒数组中元素的顺序。
</p>
<p>
  shift()    删除并返回数组的第一个元素
</p>
<p>
  slice()    从某个已有的数组返回选定的元素
</p>
<p>
  splice()   删除元素，并向数组添加新元素。
</p>
<p>
  toString() 把数组转换为字符串，并返回结果。
</p>
<p>
  unshift()   向数组的开头添加一个或更多元素，并返回新的长度。
</p>
<p>
  5、Math对象
</p>
<p><strong>方法</strong>：
</p>
<p>
  abs(x)   返回数的绝对值。 正数的绝对值是它本身，负数的绝对值是它的相反数。
</p>
<p>
  ceil(x)   对数进行上舍入。
</p>
<p>
  floor(x)  对数进行下舍入。
</p>
<p>
  max(x,y) 返回 x 和 y 中的最高值。
</p>
<p>
  min(x,y) 返回 x 和 y 中的最低值。
</p>
<p>
  random() 返回 0 ~ 1 之间的随机数。包含0，不包含1。[0,1)
</p>
<p>
  随机整数公式：Math.floor(<em>i</em> + Math.random() * (<em>j</em> – <em>i</em> + 1))
</p>
<p>
  round(x)  把数四舍五入为最接近的整数。
</p>
<p>
  6、window对象
</p>
<p><strong>方法</strong>：
</p>
<p>
  alert(); &#8212; 弹出一个警告框
</p>
<p>
  confirm(&#8216;你确定要删除吗&#8217;);  点击确定返回true，点击取消返回false
</p>
<p>
  prompt() – 弹出一个可输入的对话框，点击确定返回输入的内容，点击取消返回null
</p>
<p>
  open() – 打开一个新窗口
</p>
<p>
  var s =setTimeout(&#8220;js代码或js函数&#8221;, 毫秒数) – 表示多少毫秒后，执行前面的js代码或函数，只执行一次
</p>
<p>
  var t =setInterval(&#8220;js代码或js函数&#8221;, 毫秒数) – 表示每隔多少毫秒，执行一次前面的js代码或函数。
</p>
<p>
  clearTimeout(s); &#8212; 清除由setTimeout产生的定时器
</p>
<p>
  clearInterval(t); &#8212; 清除由setInterval产生的定时器
</p>
<p>
  7、navigator
</p>
<p>
   navigator.userAgent，从这个结果中可以查看到浏览器及浏览器的版本。
</p>
<p>
  8、screen
</p>
<p>
  screen.availHeight 返回显示屏幕的高度 (除 Windows 任务栏之外)。
</p>
<p>
  screen.availWidth 返回显示屏幕的宽度 (除 Windows 任务栏之外)。
</p>
<p>
  screen.height返回显示屏幕的高度
</p>
<p>
  screen.width返回显示屏幕的宽度
</p>
<p>
  9、history
</p>
<p>
  back() 加载 history 列表中的前一个 URL。
</p>
<p>
  forward() 加载 history 列表中的下一个 URL。
</p>
<p>
  go() 加载 history 列表中的某个具体页面。
</p>
<p>
  10、location
</p>
<p>
  reload() – 刷新页面，和点击浏览器中的刷新按钮是一个意思，如果添加参数为true表示强制刷新，和按Ctrl+F5一样，都表示清除缓存刷新。
</p>
<p>
  location的属性：</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3098.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（四）原型链、定义类或对象、私有和封装、静态属性和方法、继承、操作符 instanceof、for…in、顶层函数、贪吃蛇</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:50:44 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[for…in]]></category>
		<category><![CDATA[原型链]]></category>
		<category><![CDATA[定义类或对象]]></category>
		<category><![CDATA[操作符 instanceof]]></category>
		<category><![CDATA[私有和封装]]></category>
		<category><![CDATA[继承]]></category>
		<category><![CDATA[贪吃蛇]]></category>
		<category><![CDATA[静态属性和方法]]></category>
		<category><![CDATA[顶层函数]]></category>
		<guid isPermaLink="false">/?p=3053</guid>

					<description><![CDATA[JavaScript面向对象（4） https://developer.mozilla.org/zh-CN/d [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript面向对象（4）
</p>
<p>
  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
</p>
<p>
  http://javascript.ruanyifeng.com/
</p>
<h1>一、原型（原型链）</h1>
<p>
  1、原型对象
</p>
<p>
  案例：根据构造方法创建两个对象，看内存中的存在形式
</p>
<p>
  <img loading="lazy" decoding="async" width="547" height="264" src="/wp-content/uploads/2018/05/word-image-2679.png" class="wp-image-3054" srcset="/wp-content/uploads/2018/05/word-image-2679.png 547w, /wp-content/uploads/2018/05/word-image-2679-300x145.png 300w" sizes="(max-width: 547px) 100vw, 547px" />
</p>
<p>
  内存存在形式：
</p>
<p>
  <img loading="lazy" decoding="async" width="460" height="290" src="/wp-content/uploads/2018/05/word-image-2680.png" class="wp-image-3055" srcset="/wp-content/uploads/2018/05/word-image-2680.png 460w, /wp-content/uploads/2018/05/word-image-2680-300x189.png 300w" sizes="(max-width: 460px) 100vw, 460px" />
</p>
<p>
  根据内存图，可以看出，在内存中，两个对象的成员方法占用了两个空间，但实际上这两个方法完全一样，没有必要占用两个空间。
</p>
<p><strong>解决的办法就是使用原型对象。把两个对象相同的内容都放到构造方法的原型对象中</strong>。
</p>
<p>
  <img loading="lazy" decoding="async" width="619" height="288" src="/wp-content/uploads/2018/05/word-image-2681.png" class="wp-image-3056" srcset="/wp-content/uploads/2018/05/word-image-2681.png 619w, /wp-content/uploads/2018/05/word-image-2681-300x140.png 300w" sizes="(max-width: 619px) 100vw, 619px" />
</p>
<p>
  原型对象和构造器的关系：
</p>
<p>
  <img loading="lazy" decoding="async" width="481" height="96" src="/wp-content/uploads/2018/05/word-image-2682.png" class="wp-image-3057" srcset="/wp-content/uploads/2018/05/word-image-2682.png 481w, /wp-content/uploads/2018/05/word-image-2682-300x60.png 300w" sizes="(max-width: 481px) 100vw, 481px" />
</p>
<p>
  原型对象和构造器的关系：
</p>
<p>
  <img loading="lazy" decoding="async" width="930" height="253" src="/wp-content/uploads/2018/05/word-image-2683.png" class="wp-image-3058" srcset="/wp-content/uploads/2018/05/word-image-2683.png 930w, /wp-content/uploads/2018/05/word-image-2683-300x82.png 300w, /wp-content/uploads/2018/05/word-image-2683-768x209.png 768w" sizes="(max-width: 930px) 100vw, 930px" />
</p>
<p>
  将person中的jineng方法放到它的原型对象中。
</p>
<p>
  <img loading="lazy" decoding="async" width="995" height="421" src="/wp-content/uploads/2018/05/word-image-2684.png" class="wp-image-3059" srcset="/wp-content/uploads/2018/05/word-image-2684.png 995w, /wp-content/uploads/2018/05/word-image-2684-300x127.png 300w, /wp-content/uploads/2018/05/word-image-2684-768x325.png 768w" sizes="(max-width: 995px) 100vw, 995px" />
</p>
<p>
  2、原型链
</p>
<p>
  原型对象也是对象。它也可以充当其他构造器的原型对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="749" height="324" src="/wp-content/uploads/2018/05/word-image-2685.png" class="wp-image-3060" srcset="/wp-content/uploads/2018/05/word-image-2685.png 749w, /wp-content/uploads/2018/05/word-image-2685-300x130.png 300w" sizes="(max-width: 749px) 100vw, 749px" />
</p>
<p>
  上图中，Object对象是person的原型对象，根据person实例化得到p1对象，p1对象是Boy构造器的原型对象，根据Boy实例化得到b1.
</p>
<p>
  <img loading="lazy" decoding="async" width="693" height="336" src="/wp-content/uploads/2018/05/word-image-2686.png" class="wp-image-3061" srcset="/wp-content/uploads/2018/05/word-image-2686.png 693w, /wp-content/uploads/2018/05/word-image-2686-300x145.png 300w" sizes="(max-width: 693px) 100vw, 693px" />
</p>
<p>
  在查找一个对象的成员属性的时候，优先从对象自身查找，如果没有从它的构造方法中查找，如果构造方法中也没有，那么去构造方法的原型对象中查找，如果还没有，那么都构造器的原型对象的构造器中查找，一直找到Object对象为止。这种链式的查找方式就是原型链。
</p>
<p>
  3、扩展内置对象
</p>
<p>
  内置对象有：String、Array、Date、Math、等。
</p>
<p>
  比如使用String对象的方法：
</p>
<p>
  var s = new String(&#8216;hello&#8217;);
</p>
<p>
  s.substr();
</p>
<p>
  String是JavaScript内置的一个构造函数。
</p>
<p>
  如果在String这个构造函数的原型对象上绑定一个方法的话，那么所有的字符串都可以使用这个方法。
</p>
<p>
  其他我们所学的哪些String对象中的方法，都是String的原型中的方法。
</p>
<p>
  <img loading="lazy" decoding="async" width="1114" height="276" src="/wp-content/uploads/2018/05/word-image-2687.png" class="wp-image-3062" srcset="/wp-content/uploads/2018/05/word-image-2687.png 1114w, /wp-content/uploads/2018/05/word-image-2687-300x74.png 300w, /wp-content/uploads/2018/05/word-image-2687-768x190.png 768w, /wp-content/uploads/2018/05/word-image-2687-1024x254.png 1024w" sizes="(max-width: 1114px) 100vw, 1114px" />
</p>
<p>
  4、DOM对象的原型对象
</p>
<p>
  DOM对象实际上就是通过getElement….这类方法获取页面中的元素、属性等生产的对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="834" height="180" src="/wp-content/uploads/2018/05/word-image-2688.png" class="wp-image-3063" srcset="/wp-content/uploads/2018/05/word-image-2688.png 834w, /wp-content/uploads/2018/05/word-image-2688-300x65.png 300w, /wp-content/uploads/2018/05/word-image-2688-768x166.png 768w" sizes="(max-width: 834px) 100vw, 834px" />
</p>
<p>
  完成链式的设置dom对象的css的方法：
</p>
<p>
  <img loading="lazy" decoding="async" width="1065" height="462" src="/wp-content/uploads/2018/05/word-image-2689.png" class="wp-image-3064" srcset="/wp-content/uploads/2018/05/word-image-2689.png 1065w, /wp-content/uploads/2018/05/word-image-2689-300x130.png 300w, /wp-content/uploads/2018/05/word-image-2689-768x333.png 768w, /wp-content/uploads/2018/05/word-image-2689-1024x444.png 1024w" sizes="(max-width: 1065px) 100vw, 1065px" />
</p>
<h1>三、定义类或对象多种方式</h1>
<p>
  手册位置：上面JavaScript  左侧的JavaScript  到页面最下方点击“马上学生JavaScript高级教程吧”  左侧找到定义类或对象
</p>
<p>
  1、原始的定义对象的方式（构造函数方式）
</p>
<p>
  <img loading="lazy" decoding="async" width="706" height="204" src="/wp-content/uploads/2018/05/word-image-2690.png" class="wp-image-3065" srcset="/wp-content/uploads/2018/05/word-image-2690.png 706w, /wp-content/uploads/2018/05/word-image-2690-300x87.png 300w" sizes="(max-width: 706px) 100vw, 706px" />
</p>
<p>
  这种方式创建对象，如果创建多个对象的话，会为每个对象在内存中生成一个新的空间，比较占内存。
</p>
<p>
  2、原型对象方式
</p>
<p>
  <img loading="lazy" decoding="async" width="837" height="292" src="/wp-content/uploads/2018/05/word-image-2691.png" class="wp-image-3066" srcset="/wp-content/uploads/2018/05/word-image-2691.png 837w, /wp-content/uploads/2018/05/word-image-2691-300x105.png 300w, /wp-content/uploads/2018/05/word-image-2691-768x268.png 768w" sizes="(max-width: 837px) 100vw, 837px" />
</p>
<p>
  3、混合方式（构造方法方式+原型对象方式）
</p>
<p>
  原则是：
</p>
<p>
  把所有的对象的成员属性全部写到构造方法中，
</p>
<p>
  把所有的对象的成员方法全部写到原型对象上。
</p>
<p>
  <img loading="lazy" decoding="async" width="771" height="288" src="/wp-content/uploads/2018/05/word-image-2692.png" class="wp-image-3067" srcset="/wp-content/uploads/2018/05/word-image-2692.png 771w, /wp-content/uploads/2018/05/word-image-2692-300x112.png 300w, /wp-content/uploads/2018/05/word-image-2692-768x287.png 768w" sizes="(max-width: 771px) 100vw, 771px" />
</p>
<p>
  4、动态混合方式
</p>
<p>
  有些开发人员认为混合方式看起来不想是一个类，因为成员方法的绑定在构造函数外面，使用动态混合方式可以解决。
</p>
<p>
  <img loading="lazy" decoding="async" width="785" height="492" src="/wp-content/uploads/2018/05/word-image-2693.png" class="wp-image-3068" srcset="/wp-content/uploads/2018/05/word-image-2693.png 785w, /wp-content/uploads/2018/05/word-image-2693-300x188.png 300w, /wp-content/uploads/2018/05/word-image-2693-768x481.png 768w" sizes="(max-width: 785px) 100vw, 785px" />
</p>
<p>
  5、到底采用哪种方式
</p>
<p>
  在开发中，用的最多的就是混合方式和动态混合方式。
</p>
<h1>四、私有和封装</h1>
<p>
  在JavaScript中，没有类，那么只能模拟私有的成员。
</p>
<p>
  <img loading="lazy" decoding="async" width="599" height="358" src="/wp-content/uploads/2018/05/word-image-2694.png" class="wp-image-3069" srcset="/wp-content/uploads/2018/05/word-image-2694.png 599w, /wp-content/uploads/2018/05/word-image-2694-300x179.png 300w" sizes="(max-width: 599px) 100vw, 599px" />
</p>
<h1>五、静态属性和方法</h1>
<p>
  PHP中调用静态成员：类名::成员
</p>
<p>
  <img loading="lazy" decoding="async" width="747" height="189" src="/wp-content/uploads/2018/05/word-image-2695.png" class="wp-image-3070" srcset="/wp-content/uploads/2018/05/word-image-2695.png 747w, /wp-content/uploads/2018/05/word-image-2695-300x76.png 300w" sizes="(max-width: 747px) 100vw, 747px" />
</p>
<h1>六、继承</h1>
<p>
  1、原型链方式继承
</p>
<p>
  通过指定构造函数的原型对象方式，可以实现继承。
</p>
<p>
  <img loading="lazy" decoding="async" width="749" height="272" src="/wp-content/uploads/2018/05/word-image-2696.png" class="wp-image-3071" srcset="/wp-content/uploads/2018/05/word-image-2696.png 749w, /wp-content/uploads/2018/05/word-image-2696-300x109.png 300w" sizes="(max-width: 749px) 100vw, 749px" />
</p>
<p>
  2、对象冒充方式继承
</p>
<p>
  1、原始的对象冒充
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="470" src="/wp-content/uploads/2018/05/word-image-2697.png" class="wp-image-3072" srcset="/wp-content/uploads/2018/05/word-image-2697.png 906w, /wp-content/uploads/2018/05/word-image-2697-300x156.png 300w, /wp-content/uploads/2018/05/word-image-2697-768x398.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  2、call和apply完成继承
</p>
<p>
  <img loading="lazy" decoding="async" width="1076" height="317" src="/wp-content/uploads/2018/05/word-image-2698.png" class="wp-image-3073" srcset="/wp-content/uploads/2018/05/word-image-2698.png 1076w, /wp-content/uploads/2018/05/word-image-2698-300x88.png 300w, /wp-content/uploads/2018/05/word-image-2698-768x226.png 768w, /wp-content/uploads/2018/05/word-image-2698-1024x302.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" />
</p>
<p>
  3、实际开发中，使用哪种方式实现继承
</p>
<p>
  答案是使用混合方式，对于成员属性，使用对象冒充方式，对于成员方法，使用原型链方式
</p>
<p>
  <img loading="lazy" decoding="async" width="757" height="320" src="/wp-content/uploads/2018/05/word-image-2699.png" class="wp-image-3074" srcset="/wp-content/uploads/2018/05/word-image-2699.png 757w, /wp-content/uploads/2018/05/word-image-2699-300x127.png 300w" sizes="(max-width: 757px) 100vw, 757px" />
</p>
<h1>七、操作符instanceof</h1>
<p>
  用来判断一个对象的构造器是否是xxx
</p>
<p>
  语法：Obj instanceof Constructor
</p>
<p>
  <img loading="lazy" decoding="async" width="680" height="335" src="/wp-content/uploads/2018/05/word-image-2700.png" class="wp-image-3075" srcset="/wp-content/uploads/2018/05/word-image-2700.png 680w, /wp-content/uploads/2018/05/word-image-2700-300x148.png 300w" sizes="(max-width: 680px) 100vw, 680px" />
</p>
<p>
  person的prototype是Object对象，Object对象的构造器是Object函数，所以检测p1的构造器的时候，person和Object都返回true。
</p>
<h1>八、for…in</h1>
<p>
  用来遍历数组和对象的。
</p>
<p>
  语法：
</p>
<p>
  for(var x in arr){
</p>
<p>
  	//通过指定下标的形式，找到数组的每个单元，如 arr[x];
</p>
<p>
  }
</p>
<p>
  <img loading="lazy" decoding="async" width="973" height="352" src="/wp-content/uploads/2018/05/word-image-2701.png" class="wp-image-3076" srcset="/wp-content/uploads/2018/05/word-image-2701.png 973w, /wp-content/uploads/2018/05/word-image-2701-300x109.png 300w, /wp-content/uploads/2018/05/word-image-2701-768x278.png 768w" sizes="(max-width: 973px) 100vw, 973px" />
</p>
<h1>九、顶层函数</h1>
<p>
  顶层函数也就是全局函数，这些函数的调用不需要使用对象去调用。
</p>
<p>
  比如有Number()、String()。
</p>
<p>
  在手册的位置：上方的JavaScript  左侧的JavaScript  右侧的参考书  左侧JavaScript对象列表中有一个Functions.
</p>
<p>
  <img loading="lazy" decoding="async" width="1218" height="181" src="/wp-content/uploads/2018/05/word-image-2702.png" class="wp-image-3077" srcset="/wp-content/uploads/2018/05/word-image-2702.png 1218w, /wp-content/uploads/2018/05/word-image-2702-300x45.png 300w, /wp-content/uploads/2018/05/word-image-2702-768x114.png 768w, /wp-content/uploads/2018/05/word-image-2702-1024x152.png 1024w" sizes="(max-width: 1218px) 100vw, 1218px" />
</p>
<p>
  encodeURI()不会对“：;/?:@&amp;=+$,#”进行编码，如果要对这些字符进行编码的话，使用encodeURIComponent()；
</p>
<p>
  <img loading="lazy" decoding="async" width="800" height="184" src="/wp-content/uploads/2018/05/word-image-2703.png" class="wp-image-3078" srcset="/wp-content/uploads/2018/05/word-image-2703.png 800w, /wp-content/uploads/2018/05/word-image-2703-300x69.png 300w, /wp-content/uploads/2018/05/word-image-2703-768x177.png 768w" sizes="(max-width: 800px) 100vw, 800px" />
</p>
<h1>十、面向对象应用案例 – 贪吃蛇</h1>
<p>
  1、分析
</p>
<p>
  游戏有有三个对象，一个地图、一个食物、一条蛇。
</p>
<p>
  所以默认先创建三个对象。
</p>
<p>
  <img loading="lazy" decoding="async" width="400" height="261" src="/wp-content/uploads/2018/05/word-image-2704.png" class="wp-image-3079" srcset="/wp-content/uploads/2018/05/word-image-2704.png 400w, /wp-content/uploads/2018/05/word-image-2704-300x196.png 300w" sizes="(max-width: 400px) 100vw, 400px" />
</p>
<p>
  2、完成地图类（构造函数）
</p>
<p>
  地图有宽、高、背景颜色。这都是地图这个对象属性。
</p>
<p>
  <img loading="lazy" decoding="async" width="900" height="551" src="/wp-content/uploads/2018/05/word-image-2705.png" class="wp-image-3080" srcset="/wp-content/uploads/2018/05/word-image-2705.png 900w, /wp-content/uploads/2018/05/word-image-2705-300x184.png 300w, /wp-content/uploads/2018/05/word-image-2705-768x470.png 768w" sizes="(max-width: 900px) 100vw, 900px" />
</p>
<p>
  3、完成食物类
</p>
<p>
  <img loading="lazy" decoding="async" width="939" height="565" src="/wp-content/uploads/2018/05/word-image-2706.png" class="wp-image-3081" srcset="/wp-content/uploads/2018/05/word-image-2706.png 939w, /wp-content/uploads/2018/05/word-image-2706-300x181.png 300w, /wp-content/uploads/2018/05/word-image-2706-768x462.png 768w" sizes="(max-width: 939px) 100vw, 939px" />
</p>
<p>
  计算食物的left和top的方案：
</p>
<p>
  <img loading="lazy" decoding="async" width="1143" height="603" src="/wp-content/uploads/2018/05/word-image-2707.png" class="wp-image-3082" srcset="/wp-content/uploads/2018/05/word-image-2707.png 1143w, /wp-content/uploads/2018/05/word-image-2707-300x158.png 300w, /wp-content/uploads/2018/05/word-image-2707-768x405.png 768w, /wp-content/uploads/2018/05/word-image-2707-1024x540.png 1024w" sizes="(max-width: 1143px) 100vw, 1143px" />
</p>
<p>
  把食物放到地图中：
</p>
<p>
  首先把Map类的对象，升级为全局变量。
</p>
<p>
  <img loading="lazy" decoding="async" width="596" height="106" src="/wp-content/uploads/2018/05/word-image-2708.png" class="wp-image-3083" srcset="/wp-content/uploads/2018/05/word-image-2708.png 596w, /wp-content/uploads/2018/05/word-image-2708-300x53.png 300w" sizes="(max-width: 596px) 100vw, 596px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="570" height="149" src="/wp-content/uploads/2018/05/word-image-2709.png" class="wp-image-3084" srcset="/wp-content/uploads/2018/05/word-image-2709.png 570w, /wp-content/uploads/2018/05/word-image-2709-300x78.png 300w" sizes="(max-width: 570px) 100vw, 570px" />
</p>
<p>
  在地图类中用一个成员属性_map表示地图那个div
</p>
<p>
  <img loading="lazy" decoding="async" width="829" height="416" src="/wp-content/uploads/2018/05/word-image-2710.png" class="wp-image-3085" srcset="/wp-content/uploads/2018/05/word-image-2710.png 829w, /wp-content/uploads/2018/05/word-image-2710-300x151.png 300w, /wp-content/uploads/2018/05/word-image-2710-768x385.png 768w" sizes="(max-width: 829px) 100vw, 829px" />
</p>
<p>
  把食物放到地图上：
</p>
<p>
  <img loading="lazy" decoding="async" width="762" height="389" src="/wp-content/uploads/2018/05/word-image-2711.png" class="wp-image-3086" srcset="/wp-content/uploads/2018/05/word-image-2711.png 762w, /wp-content/uploads/2018/05/word-image-2711-300x153.png 300w" sizes="(max-width: 762px) 100vw, 762px" />
</p>
<p>
  4、开发一条静态的小蛇
</p>
<p>
  蛇是由三个小div组成，每个小div都有宽度、高度、背景颜色、定位。
</p>
<p>
  <img loading="lazy" decoding="async" width="1028" height="523" src="/wp-content/uploads/2018/05/word-image-2712.png" class="wp-image-3087" srcset="/wp-content/uploads/2018/05/word-image-2712.png 1028w, /wp-content/uploads/2018/05/word-image-2712-300x153.png 300w, /wp-content/uploads/2018/05/word-image-2712-768x391.png 768w, /wp-content/uploads/2018/05/word-image-2712-1024x521.png 1024w" sizes="(max-width: 1028px) 100vw, 1028px" />
</p>
<p>
  将蛇显示在地图上：
</p>
<p>
  <img loading="lazy" decoding="async" width="612" height="180" src="/wp-content/uploads/2018/05/word-image-2713.png" class="wp-image-3088" srcset="/wp-content/uploads/2018/05/word-image-2713.png 612w, /wp-content/uploads/2018/05/word-image-2713-300x88.png 300w" sizes="(max-width: 612px) 100vw, 612px" />
</p>
<p>
  5、蛇移动
</p>
<p>
  写一个蛇移动的方法，这个方法实际上就是改变蛇的坐标即可。
</p>
<p>
  <img loading="lazy" decoding="async" width="817" height="393" src="/wp-content/uploads/2018/05/word-image-2714.png" class="wp-image-3089" srcset="/wp-content/uploads/2018/05/word-image-2714.png 817w, /wp-content/uploads/2018/05/word-image-2714-300x144.png 300w, /wp-content/uploads/2018/05/word-image-2714-768x369.png 768w" sizes="(max-width: 817px) 100vw, 817px" />
</p>
<p>
  每隔两秒调用一个move方法，并重新生成蛇。
</p>
<p>
  <img loading="lazy" decoding="async" width="650" height="249" src="/wp-content/uploads/2018/05/word-image-2715.png" class="wp-image-3090" srcset="/wp-content/uploads/2018/05/word-image-2715.png 650w, /wp-content/uploads/2018/05/word-image-2715-300x115.png 300w" sizes="(max-width: 650px) 100vw, 650px" />
</p>
<p>
  从新显示蛇的时候，会发现蛇越来越长，原因是每次显示蛇（show方法调用的时候），都会重新创建一个div，这样的话，div会越来越多，解决的办法是判断：
</p>
<p>
  <img loading="lazy" decoding="async" width="1051" height="557" src="/wp-content/uploads/2018/05/word-image-2716.png" class="wp-image-3091" srcset="/wp-content/uploads/2018/05/word-image-2716.png 1051w, /wp-content/uploads/2018/05/word-image-2716-300x159.png 300w, /wp-content/uploads/2018/05/word-image-2716-768x407.png 768w, /wp-content/uploads/2018/05/word-image-2716-1024x543.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" />
</p>
<p>
  6、控制蛇的方向
</p>
<p>
  通过按键（上下左右键）控制蛇的运动方向
</p>
<p>
  1、通过按键获取键盘的keyCode
</p>
<p>
  2、将keyCode传递给snake类的direct方法<br />
  <img loading="lazy" decoding="async" width="574" height="332" src="/wp-content/uploads/2018/05/word-image-2717.png" class="wp-image-3092" srcset="/wp-content/uploads/2018/05/word-image-2717.png 574w, /wp-content/uploads/2018/05/word-image-2717-300x174.png 300w" sizes="(max-width: 574px) 100vw, 574px" />
</p>
<p>
  3、direct方法设置蛇的方向的属性directtion
</p>
<p>
  <img loading="lazy" decoding="async" width="746" height="505" src="/wp-content/uploads/2018/05/word-image-2718.png" class="wp-image-3093" srcset="/wp-content/uploads/2018/05/word-image-2718.png 746w, /wp-content/uploads/2018/05/word-image-2718-300x203.png 300w, /wp-content/uploads/2018/05/word-image-2718-220x150.png 220w" sizes="(max-width: 746px) 100vw, 746px" />
</p>
<p>
  4、在move方法中，根据directtion属性，设置蛇头的坐标
</p>
<p>
  <img loading="lazy" decoding="async" width="795" height="512" src="/wp-content/uploads/2018/05/word-image-2719.png" class="wp-image-3094" srcset="/wp-content/uploads/2018/05/word-image-2719.png 795w, /wp-content/uploads/2018/05/word-image-2719-300x193.png 300w, /wp-content/uploads/2018/05/word-image-2719-768x495.png 768w" sizes="(max-width: 795px) 100vw, 795px" />
</p>
<p>
  7、吃食物
</p>
<p>
  判断，如果蛇头的坐标和食物的坐标一致，就表示吃到了
</p>
<p>
  <img loading="lazy" decoding="async" width="900" height="215" src="/wp-content/uploads/2018/05/word-image-2720.png" class="wp-image-3095" srcset="/wp-content/uploads/2018/05/word-image-2720.png 900w, /wp-content/uploads/2018/05/word-image-2720-300x72.png 300w, /wp-content/uploads/2018/05/word-image-2720-768x183.png 768w" sizes="(max-width: 900px) 100vw, 900px" />
</p>
<p>
  解决食物不会减少的问题：
</p>
<p>
  <img loading="lazy" decoding="async" width="804" height="537" src="/wp-content/uploads/2018/05/word-image-2721.png" class="wp-image-3096" srcset="/wp-content/uploads/2018/05/word-image-2721.png 804w, /wp-content/uploads/2018/05/word-image-2721-300x200.png 300w, /wp-content/uploads/2018/05/word-image-2721-768x513.png 768w" sizes="(max-width: 804px) 100vw, 804px" />
</p>
<p>
  8、其他问题还有，越来越快，快到某一个点应该保持这个速度就可以了
</p>
<p>
  9、边界问题，判断蛇头的坐标是否超出边界的坐标
</p>
<p>
  10、不能撞自身，判断蛇头坐标是否和蛇身中的某一节坐标相同</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3053.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JS高级（五）正则、分组、捕获、反向引用、匹配、属性、方法</title>
		<link>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html</link>
					<comments>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 06:46:40 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[前端技术]]></category>
		<category><![CDATA[分组]]></category>
		<category><![CDATA[匹配]]></category>
		<category><![CDATA[反向引用]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[捕获]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[正则]]></category>
		<guid isPermaLink="false">/?p=3000</guid>

					<description><![CDATA[JavaScript应该掌握的知识： DOM操作： 元素：获取节点，添加节点，修改节点，删除节点，克隆节点 属 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>
  JavaScript应该掌握的知识：
</p>
<p>
  DOM操作：
</p>
<p>
  	元素：获取节点，添加节点，修改节点，删除节点，克隆节点
</p>
<p>
  	属性：获取元素的属性，增删改属性
</p>
<p>
  事件绑定：
</p>
<p>
  	domObj.onclick = function(){
</p>
<p>
  		//这个函数不是直接执行，由用户的行为来触发这个函数
</p>
<p>
  }
</p>
<p>
  常用事件：
</p>
<p>
  window.onload事件：
</p>
<p>
  <img loading="lazy" decoding="async" width="699" height="307" src="/wp-content/uploads/2018/05/word-image-2630.png" class="wp-image-3001" srcset="/wp-content/uploads/2018/05/word-image-2630.png 699w, /wp-content/uploads/2018/05/word-image-2630-300x132.png 300w" sizes="(max-width: 699px) 100vw, 699px" />
</p>
<p>
  onclick
</p>
<p>
  onkeyup  /  onkeydown  / onkeypress
</p>
<p>
  onmouseover / onmouseout
</p>
<p>
  onfocus / onblur
</p>
<p>
  onchange
</p>
<p>
  <img loading="lazy" decoding="async" width="761" height="420" src="/wp-content/uploads/2018/05/word-image-2631.png" class="wp-image-3002" srcset="/wp-content/uploads/2018/05/word-image-2631.png 761w, /wp-content/uploads/2018/05/word-image-2631-300x166.png 300w" sizes="(max-width: 761px) 100vw, 761px" />
</p>
<p>
  正则表达式
</p>
<h1>一、概述</h1>
<p>
  1、概述
</p>
<p>
  正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个字符串中是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。
</p>
<p>
  匹配就是在某个字符串中查找你想要查找的内容（由正则表达式决定），如果查找到了，就表示匹配。没有查找到就表示不匹配。
</p>
<p>
  abacabad
</p>
<p>
  正则表达式本身是一门独立的技术，可以被大多数编程语言所使用，如Javascript、PHP、Java
</p>
<p>
  2、应用场景
</p>
<p>
  （1）表单验证里面，验证字符的合法性，如邮箱是否合法，手机号是否合法等等。
</p>
<p>
  （2）信息过滤，如论坛帖子或者评论中的非法字符，例如 sql注入、js脚本注入、煽动性的言论。
</p>
<p>
  （3）信息采集，采集别人网站上面的内容，例如整页采集时 筛选出需求的部分
</p>
<p>
  （4）信息替换。
</p>
<p>
  （5）页面伪静态的规则
</p>
<h1>二、入门案例</h1>
<p>
  1、正则用法说明
</p>
<p>
  这个案例是在字符串str中查找是否有p。
</p>
<p>
  <img loading="lazy" decoding="async" width="657" height="160" src="/wp-content/uploads/2018/05/word-image-2632.png" class="wp-image-3003" srcset="/wp-content/uploads/2018/05/word-image-2632.png 657w, /wp-content/uploads/2018/05/word-image-2632-300x73.png 300w" sizes="(max-width: 657px) 100vw, 657px" />
</p>
<p><strong>正则语法：</strong>
</p>
<p>
  以两条斜线，作为正则表达式起始和结尾的定界符。不能加引号。
</p>
<p>
  match是字符串方法，所以应该由字符串调用。意思是在字符串中匹配要查找的值，如果匹配将返回匹配的内容，如果不匹配返回null。
</p>
<p>
  2、全局修饰符g
</p>
<p>
  g是global，表示全局的意思，它是正则表达式语法中的修饰符，修饰符应该放到定界符(/)的后面。
</p>
<p>
  <img loading="lazy" decoding="async" width="657" height="160" src="/wp-content/uploads/2018/05/word-image-2633.png" class="wp-image-3004" srcset="/wp-content/uploads/2018/05/word-image-2633.png 657w, /wp-content/uploads/2018/05/word-image-2633-300x73.png 300w" sizes="(max-width: 657px) 100vw, 657px" />
</p>
<h1>三、正则语法</h1>
<p>
  1、量词
</p>
<p>
  n+   匹配任何包含至少一个 n 的字符串。匹配一个或多个前导字符（<strong>前导字符就是紧挨着+的前一个字符</strong>）
</p>
<p>
  n*    匹配任何包含零个或多个 n 的字符串。前导字符有没有都行
</p>
<p>
  n?    匹配任何包含零个或一个 n 的字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="911" height="101" src="/wp-content/uploads/2018/05/word-image-2634.png" class="wp-image-3005" srcset="/wp-content/uploads/2018/05/word-image-2634.png 911w, /wp-content/uploads/2018/05/word-image-2634-300x33.png 300w, /wp-content/uploads/2018/05/word-image-2634-768x85.png 768w" sizes="(max-width: 911px) 100vw, 911px" />
</p>
<p>
  n{X} 匹配包含 X 个 n 的序列的字符串。
</p>
<p>
  n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
</p>
<p>
  n{X,} 匹配包含至少 X 个 n 的序列的字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="738" height="92" src="/wp-content/uploads/2018/05/word-image-2635.png" class="wp-image-3006" srcset="/wp-content/uploads/2018/05/word-image-2635.png 738w, /wp-content/uploads/2018/05/word-image-2635-300x37.png 300w" sizes="(max-width: 738px) 100vw, 738px" />
</p>
<p>
  n$    匹配任何结尾为 n 的字符串。从末尾开始匹配
</p>
<p>
  ^n    匹配任何开头为 n 的字符串。（注意位置在前面）
</p>
<p>
  ^n$   表示只匹配字符串n。也就是匹配整个字符串。
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="112" src="/wp-content/uploads/2018/05/word-image-2636.png" class="wp-image-3007" srcset="/wp-content/uploads/2018/05/word-image-2636.png 906w, /wp-content/uploads/2018/05/word-image-2636-300x37.png 300w, /wp-content/uploads/2018/05/word-image-2636-768x95.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  2、元字符
</p>
<p><strong>.</strong> 表示单个字符，表示任意字符。除了换行和行结束符。
</p>
<p><strong>.*</strong> 表示任意字符串（0个或多个任意字符，除了换行和行结束符）
</p>
<p>
  <img loading="lazy" decoding="async" width="725" height="68" src="/wp-content/uploads/2018/05/word-image-2637.png" class="wp-image-3008" srcset="/wp-content/uploads/2018/05/word-image-2637.png 725w, /wp-content/uploads/2018/05/word-image-2637-300x28.png 300w" sizes="(max-width: 725px) 100vw, 725px" />
</p>
<p><strong>\w</strong>  匹配任何数字、字母、下划线。<strong>一个\w表示一个字符</strong>。
</p>
<p><strong>\W</strong>  匹配任何非数字、非字母、非下划线。
</p>
<p><strong>\d</strong> 查找数字。
</p>
<p><strong>\D</strong> 查找非数字字符。
</p>
<p><strong>\s</strong> 查找空白字符。
</p>
<p><strong>\S</strong> 查找非空白字符。
</p>
<p><strong>\b</strong> 匹配单词边界。（边界字母个数没有限制；\b放前面表示匹配单词前面的边界，\b表示匹配单词后面的边界）
</p>
<p><strong>\B</strong> 匹配非单词边界。
</p>
<p><strong>\n</strong> 查找换行符。
</p>
<p><strong>\r</strong> 查找回车符。
</p>
<p><strong>\t</strong> 查找制表符。
</p>
<p>
  <img loading="lazy" decoding="async" width="795" height="207" src="/wp-content/uploads/2018/05/word-image-2638.png" class="wp-image-3009" srcset="/wp-content/uploads/2018/05/word-image-2638.png 795w, /wp-content/uploads/2018/05/word-image-2638-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2638-768x200.png 768w" sizes="(max-width: 795px) 100vw, 795px" />
</p>
<p>
  3、方括号
</p>
<p>
  方括号表示一个范围，也称为<strong>字符簇</strong>。
</p>
<p>
  [abc]  查找方括号之间的任何字符。
</p>
<p>
  [^abc] 查找任何不在方括号之间的字符。（方括号中的^表示取反）
</p>
<p>
  <img loading="lazy" decoding="async" width="927" height="139" src="/wp-content/uploads/2018/05/word-image-2639.png" class="wp-image-3010" srcset="/wp-content/uploads/2018/05/word-image-2639.png 927w, /wp-content/uploads/2018/05/word-image-2639-300x45.png 300w, /wp-content/uploads/2018/05/word-image-2639-768x115.png 768w" sizes="(max-width: 927px) 100vw, 927px" />
</p>
<p>
  [0-9] 查找任何从 0 至 9 的数字。表示一个字符
</p>
<p>
  [a-z] 查找任何从小写 a 到小写 z 的字符。
</p>
<p>
  [A-Z] 查找任何从大写 A 到大写 Z 的字符。
</p>
<p>
  [A-z] 查找任何从大写 A 到小写 z 的字符。<strong>包括下划线</strong>。
</p>
<p>
  [5-8] 查找5 &lt;= 目标 &lt;= 8的字符
</p>
<p>
  <img loading="lazy" decoding="async" width="854" height="180" src="/wp-content/uploads/2018/05/word-image-2640.png" class="wp-image-3011" srcset="/wp-content/uploads/2018/05/word-image-2640.png 854w, /wp-content/uploads/2018/05/word-image-2640-300x63.png 300w, /wp-content/uploads/2018/05/word-image-2640-768x162.png 768w" sizes="(max-width: 854px) 100vw, 854px" />
</p>
<p><strong>(</strong>red|blue|green<strong>)</strong> 查找任何指定的选项。（竖线|表示或者）
</p>
<p>
  <img loading="lazy" decoding="async" width="971" height="52" src="/wp-content/uploads/2018/05/word-image-2641.png" class="wp-image-3012" srcset="/wp-content/uploads/2018/05/word-image-2641.png 971w, /wp-content/uploads/2018/05/word-image-2641-300x16.png 300w, /wp-content/uploads/2018/05/word-image-2641-768x41.png 768w" sizes="(max-width: 971px) 100vw, 971px" />
</p>
<p>
  4、修饰符
</p>
<p>
  i  执行对大小写不敏感的匹配。
</p>
<p>
  g  执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）。
</p>
<p>
  m 执行多行匹配。
</p>
<p>
  <img loading="lazy" decoding="async" width="937" height="123" src="/wp-content/uploads/2018/05/word-image-2642.png" class="wp-image-3013" srcset="/wp-content/uploads/2018/05/word-image-2642.png 937w, /wp-content/uploads/2018/05/word-image-2642-300x39.png 300w, /wp-content/uploads/2018/05/word-image-2642-768x101.png 768w" sizes="(max-width: 937px) 100vw, 937px" />
</p>
<p>
  5、转义字符
</p>
<p>
  <img loading="lazy" decoding="async" width="505" height="49" src="/wp-content/uploads/2018/05/word-image-2643.png" class="wp-image-3014" srcset="/wp-content/uploads/2018/05/word-image-2643.png 505w, /wp-content/uploads/2018/05/word-image-2643-300x29.png 300w" sizes="(max-width: 505px) 100vw, 505px" />
</p>
<h1>四、分组/捕获和反向引用</h1>
<p><strong>捕获和反向引用的语法的解释</strong>：
</p>
<p>
  正则中出现的小括号，就叫捕获或者分组
</p>
<p>
  在正则语法中（在/…/内），在捕获的后面，用“\1”来引用前面的捕获。用\2表示第二个捕获的内容….
</p>
<p>
  在正则语法外（如replace时），用“$1”来引用前面的捕获。
</p>
<p>
  <img loading="lazy" decoding="async" width="737" height="273" src="/wp-content/uploads/2018/05/word-image-2644.png" class="wp-image-3015" srcset="/wp-content/uploads/2018/05/word-image-2644.png 737w, /wp-content/uploads/2018/05/word-image-2644-300x111.png 300w" sizes="(max-width: 737px) 100vw, 737px" />
</p>
<p><strong>禁止引用</strong>
</p>
<p><strong>(?:正则) 这个小括号中的内容不能够被引用</strong>
</p>
<p>
  <img loading="lazy" decoding="async" width="901" height="96" src="/wp-content/uploads/2018/05/word-image-2645.png" class="wp-image-3016" srcset="/wp-content/uploads/2018/05/word-image-2645.png 901w, /wp-content/uploads/2018/05/word-image-2645-300x32.png 300w, /wp-content/uploads/2018/05/word-image-2645-768x82.png 768w" sizes="(max-width: 901px) 100vw, 901px" />
</p>
<h1>五、匹配中文（utf-8编码）</h1>
<p>
  每个字符（中文、英文字母、数字、各种符号、拉丁文、韩文、日文等）都对应着一个Unicode编码。
</p>
<p>
  查看Unicode编码，找到中文的部分，然后获取中文的Unicode编码的区间，就可以用正则匹配了。
</p>
<p><strong>中文的Unicode编码从4E00开始，到9FA5结束</strong>。
</p>
<p>
  [4E00-9FA5]
</p>
<p><strong>完整的Unicode编码表</strong>：http://blog.csdn.net/hherima/article/details/9045861
</p>
<p>
  <img loading="lazy" decoding="async" width="868" height="80" src="/wp-content/uploads/2018/05/word-image-2646.png" class="wp-image-3017" srcset="/wp-content/uploads/2018/05/word-image-2646.png 868w, /wp-content/uploads/2018/05/word-image-2646-300x28.png 300w, /wp-content/uploads/2018/05/word-image-2646-768x71.png 768w" sizes="(max-width: 868px) 100vw, 868px" />
</p>
<h1>六、环视（断言/零宽断言）</h1>
<p><strong>every(?=n) 匹配任何其后紧接指定字符串 n 的字符串</strong>。
</p>
<p>
  查找a，什么样的a呢？后面必须是b的a
</p>
<p>
  <img loading="lazy" decoding="async" width="699" height="96" src="/wp-content/uploads/2018/05/word-image-2647.png" class="wp-image-3018" srcset="/wp-content/uploads/2018/05/word-image-2647.png 699w, /wp-content/uploads/2018/05/word-image-2647-300x41.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></p>
<p><strong>every(?!n) 匹配任何其后没有紧接指定字符串 n 的字符串</strong>。
</p>
<p>
  查找a，什么样的a呢？后面不能是b的a
</p>
<p>
  <img loading="lazy" decoding="async" width="782" height="141" src="/wp-content/uploads/2018/05/word-image-2648.png" class="wp-image-3019" srcset="/wp-content/uploads/2018/05/word-image-2648.png 782w, /wp-content/uploads/2018/05/word-image-2648-300x54.png 300w, /wp-content/uploads/2018/05/word-image-2648-768x138.png 768w" sizes="(max-width: 782px) 100vw, 782px" />
</p>
<p>
  另外，还会看到(?!B)[A-Z]这种写法，其实它是[A-Z]范围里，排除B的意思，前置的(?!B)只是对后面数据的一个限定，从而达到过滤匹配的效果。
</p>
<p>
  <img loading="lazy" decoding="async" width="854" height="138" src="/wp-content/uploads/2018/05/word-image-2649.png" class="wp-image-3020" srcset="/wp-content/uploads/2018/05/word-image-2649.png 854w, /wp-content/uploads/2018/05/word-image-2649-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2649-768x124.png 768w" sizes="(max-width: 854px) 100vw, 854px" />
</p>
<h1>七、正则对象的属性和方法</h1>
<p>
  正则对象中的成员方法和属性的正确调用方式：
</p>
<p>
  <img loading="lazy" decoding="async" width="673" height="160" src="/wp-content/uploads/2018/05/word-image-2650.png" class="wp-image-3021" srcset="/wp-content/uploads/2018/05/word-image-2650.png 673w, /wp-content/uploads/2018/05/word-image-2650-300x71.png 300w" sizes="(max-width: 673px) 100vw, 673px" />
</p>
<p>
  1、exec方法和lastIndex属性
</p>
<p>
  exec方法执行一个正则匹配，<strong>只匹配一次</strong>，匹配到结果就返回一个数组类型的结果，匹配不到就返回null。并将表示匹配的位置 置为下一个匹配的位置。
</p>
<p>
  lastIndex一个整数，标示开始下一次匹配的字符位置。没有更多匹配重置lastIndex为0.
</p>
<p>
  依次调用exec匹配下一个的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="894" height="261" src="/wp-content/uploads/2018/05/word-image-2651.png" class="wp-image-3023" srcset="/wp-content/uploads/2018/05/word-image-2651.png 894w, /wp-content/uploads/2018/05/word-image-2651-300x88.png 300w, /wp-content/uploads/2018/05/word-image-2651-768x224.png 768w" sizes="(max-width: 894px) 100vw, 894px" />
</p>
<p>
  匹配带子表达式的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="982" height="133" src="/wp-content/uploads/2018/05/word-image-2652.png" class="wp-image-3024" srcset="/wp-content/uploads/2018/05/word-image-2652.png 982w, /wp-content/uploads/2018/05/word-image-2652-300x41.png 300w, /wp-content/uploads/2018/05/word-image-2652-768x104.png 768w" sizes="(max-width: 982px) 100vw, 982px" />
</p>
<p>
  带子表达式并且依次调用的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="934" height="118" src="/wp-content/uploads/2018/05/word-image-2653.png" class="wp-image-3025" srcset="/wp-content/uploads/2018/05/word-image-2653.png 934w, /wp-content/uploads/2018/05/word-image-2653-300x38.png 300w, /wp-content/uploads/2018/05/word-image-2653-768x97.png 768w" sizes="(max-width: 934px) 100vw, 934px" />
</p>
<p>
  2、test方法
</p>
<p>
  test方法检测目标字符串和正则表达式是否匹配，如果匹配返回true，不匹配返回false。
</p>
<p>
  <img loading="lazy" decoding="async" width="587" height="86" src="/wp-content/uploads/2018/05/word-image-2654.png" class="wp-image-3026" srcset="/wp-content/uploads/2018/05/word-image-2654.png 587w, /wp-content/uploads/2018/05/word-image-2654-300x44.png 300w" sizes="(max-width: 587px) 100vw, 587px" />
</p>
<h1>八、支持正则表达式的 String 对象的方法</h1>
<p>
  1、search()
</p>
<p>
  在字符串中搜索符合正则表达式的结果。如果找到结果返回结果的位置，停止向后检索，也就是说忽略全局标识符g；如果没有匹配结果，返回-1.
</p>
<p>
  <img loading="lazy" decoding="async" width="508" height="159" src="/wp-content/uploads/2018/05/word-image-2655.png" class="wp-image-3027" srcset="/wp-content/uploads/2018/05/word-image-2655.png 508w, /wp-content/uploads/2018/05/word-image-2655-300x94.png 300w" sizes="(max-width: 508px) 100vw, 508px" />
</p>
<p>
  2、match()
</p>
<p>
  在字符串中检索匹配正则表达式的子串；如果匹配，返回包含匹配结果的一个数组；不匹配返回null。
</p>
<p><strong>不加全局g的情况</strong>：
</p>
<p>
  	获取的结果只是第一个匹配的内容，匹配的内容中的第一个单元是匹配的结果，后面的单元是子表达式
</p>
<p>
  <img loading="lazy" decoding="async" width="655" height="75" src="/wp-content/uploads/2018/05/word-image-2656.png" class="wp-image-3028" srcset="/wp-content/uploads/2018/05/word-image-2656.png 655w, /wp-content/uploads/2018/05/word-image-2656-300x34.png 300w" sizes="(max-width: 655px) 100vw, 655px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="978" height="111" src="/wp-content/uploads/2018/05/word-image-2657.png" class="wp-image-3029" srcset="/wp-content/uploads/2018/05/word-image-2657.png 978w, /wp-content/uploads/2018/05/word-image-2657-300x34.png 300w, /wp-content/uploads/2018/05/word-image-2657-768x87.png 768w" sizes="(max-width: 978px) 100vw, 978px" />
</p>
<p><strong>加全局的g的情况</strong>：
</p>
<p>
  	获取的结果是所有匹配的内容，但是不包含子表达式。
</p>
<p>
  <img loading="lazy" decoding="async" width="910" height="140" src="/wp-content/uploads/2018/05/word-image-2658.png" class="wp-image-3030" srcset="/wp-content/uploads/2018/05/word-image-2658.png 910w, /wp-content/uploads/2018/05/word-image-2658-300x46.png 300w, /wp-content/uploads/2018/05/word-image-2658-768x118.png 768w" sizes="(max-width: 910px) 100vw, 910px" />
</p>
<p>
  <img loading="lazy" decoding="async" width="997" height="173" src="/wp-content/uploads/2018/05/word-image-2659.png" class="wp-image-3031" srcset="/wp-content/uploads/2018/05/word-image-2659.png 997w, /wp-content/uploads/2018/05/word-image-2659-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2659-768x133.png 768w" sizes="(max-width: 997px) 100vw, 997px" />
</p>
<p><strong>多次调用和调用一次效果一样</strong>。
</p>
<p>
  3、split()
</p>
<p>
  将字符串分割成数组：
</p>
<p>
  <img loading="lazy" decoding="async" width="805" height="118" src="/wp-content/uploads/2018/05/word-image-2660.png" class="wp-image-3032" srcset="/wp-content/uploads/2018/05/word-image-2660.png 805w, /wp-content/uploads/2018/05/word-image-2660-300x44.png 300w, /wp-content/uploads/2018/05/word-image-2660-768x113.png 768w" sizes="(max-width: 805px) 100vw, 805px" />
</p>
<p>
  4、replace()替换
</p>
<p>
  默认只替换一次，加g全部替换
</p>
<p>
  <img loading="lazy" decoding="async" width="717" height="130" src="/wp-content/uploads/2018/05/word-image-2661.png" class="wp-image-3033" srcset="/wp-content/uploads/2018/05/word-image-2661.png 717w, /wp-content/uploads/2018/05/word-image-2661-300x54.png 300w" sizes="(max-width: 717px) 100vw, 717px" />
</p>
<p>
  替换的时候，使用&#8221;$1&#8243;表示第一个字表达式：
</p>
<p>
  <img loading="lazy" decoding="async" width="998" height="140" src="/wp-content/uploads/2018/05/word-image-2662.png" class="wp-image-3034" srcset="/wp-content/uploads/2018/05/word-image-2662.png 998w, /wp-content/uploads/2018/05/word-image-2662-300x42.png 300w, /wp-content/uploads/2018/05/word-image-2662-768x108.png 768w" sizes="(max-width: 998px) 100vw, 998px" />
</p>
<p>
  替换abc为a[a-b-c]c   hds  h[h-d-s]s
</p>
<p>
  <img loading="lazy" decoding="async" width="986" height="223" src="/wp-content/uploads/2018/05/word-image-2663.png" class="wp-image-3035" srcset="/wp-content/uploads/2018/05/word-image-2663.png 986w, /wp-content/uploads/2018/05/word-image-2663-300x68.png 300w, /wp-content/uploads/2018/05/word-image-2663-768x174.png 768w" sizes="(max-width: 986px) 100vw, 986px" />
</p>
<p>
  替换aaa bbb ccc为Aaa Bbb Ccc
</p>
<p>
  <img loading="lazy" decoding="async" width="1250" height="201" src="/wp-content/uploads/2018/05/word-image-2664.png" class="wp-image-3036" srcset="/wp-content/uploads/2018/05/word-image-2664.png 1250w, /wp-content/uploads/2018/05/word-image-2664-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2664-768x123.png 768w, /wp-content/uploads/2018/05/word-image-2664-1024x165.png 1024w" sizes="(max-width: 1250px) 100vw, 1250px" />
</p>
<h1>九、案例</h1>
<p>
  1、匹配手机号格式是否正确
</p>
<p>
  要求：
</p>
<p>
  基本的要求：11位，1打头，纯数字
</p>
<p>
  特别精细的话，必须联系各大运营商，查看23位都是什么，比如有136的，但是可以没有163的。
</p>
<p>
  <img loading="lazy" decoding="async" width="605" height="285" src="/wp-content/uploads/2018/05/word-image-2665.png" class="wp-image-3037" srcset="/wp-content/uploads/2018/05/word-image-2665.png 605w, /wp-content/uploads/2018/05/word-image-2665-300x141.png 300w" sizes="(max-width: 605px) 100vw, 605px" />
</p>
<p>
  2、匹配邮箱格式是否正确
</p>
<p>
  邮箱：
</p>
<p>
  @前面有4~16个字符（都可以有数字，字母，下划线，点 ，中横线）
</p>
<p>
  @后面点前面：允许数字字母组合，长度2~10位
</p>
<p>
  点后面：只允许出现字母，长度为2~5；
</p>
<p>
  还有一种情况是后面是两个点，如xxxx@xx.com.cn
</p>
<p>
  <img loading="lazy" decoding="async" width="793" height="192" src="/wp-content/uploads/2018/05/word-image-2666.png" class="wp-image-3038" srcset="/wp-content/uploads/2018/05/word-image-2666.png 793w, /wp-content/uploads/2018/05/word-image-2666-300x73.png 300w, /wp-content/uploads/2018/05/word-image-2666-768x186.png 768w" sizes="(max-width: 793px) 100vw, 793px" />
</p>
<p>
  3、解决结巴程序
</p>
<p>
  把叠字的字符串，换成单子，比如，“今今今今天天天天天天天天中午吃吃吃了泡面”换成“今天中午吃了泡面”
</p>
<p>
  <img loading="lazy" decoding="async" width="974" height="155" src="/wp-content/uploads/2018/05/word-image-2667.png" class="wp-image-3039" srcset="/wp-content/uploads/2018/05/word-image-2667.png 974w, /wp-content/uploads/2018/05/word-image-2667-300x48.png 300w, /wp-content/uploads/2018/05/word-image-2667-768x122.png 768w" sizes="(max-width: 974px) 100vw, 974px" />
</p>
<p>
  4、用户名验证
</p>
<p>
  注册的时候，要求用户名：长度4~10位，不能是纯数字，不能是纯字母，不能有特殊符号，不能以数字打头。
</p>
<p>
  <img loading="lazy" decoding="async" width="1008" height="260" src="/wp-content/uploads/2018/05/word-image-2668.png" class="wp-image-3040" srcset="/wp-content/uploads/2018/05/word-image-2668.png 1008w, /wp-content/uploads/2018/05/word-image-2668-300x77.png 300w, /wp-content/uploads/2018/05/word-image-2668-768x198.png 768w" sizes="(max-width: 1008px) 100vw, 1008px" />
</p>
<h1>十、PHP中的正则表达式</h1>
<p>
  语法和JavaScript中的正则语法基本一致。
</p>
<p>
  PHP中的正则函数：
</p>
<p>
  <img loading="lazy" decoding="async" width="728" height="406" src="/wp-content/uploads/2018/05/word-image-2669.png" class="wp-image-3041" srcset="/wp-content/uploads/2018/05/word-image-2669.png 728w, /wp-content/uploads/2018/05/word-image-2669-300x167.png 300w" sizes="(max-width: 728px) 100vw, 728px" />
</p>
<p>
  1、preg_match()
</p>
<p>
  基础语法练习：
</p>
<p>
  基础语法和js中正则语法基本相同。
</p>
<p>
  <img loading="lazy" decoding="async" width="839" height="242" src="/wp-content/uploads/2018/05/word-image-2670.png" class="wp-image-3042" srcset="/wp-content/uploads/2018/05/word-image-2670.png 839w, /wp-content/uploads/2018/05/word-image-2670-300x87.png 300w, /wp-content/uploads/2018/05/word-image-2670-768x222.png 768w" sizes="(max-width: 839px) 100vw, 839px" />
</p>
<p>
  具体查看preg_match的用法：
</p>
<p>
  <img loading="lazy" decoding="async" width="906" height="289" src="/wp-content/uploads/2018/05/word-image-2671.png" class="wp-image-3043" srcset="/wp-content/uploads/2018/05/word-image-2671.png 906w, /wp-content/uploads/2018/05/word-image-2671-300x96.png 300w, /wp-content/uploads/2018/05/word-image-2671-768x245.png 768w" sizes="(max-width: 906px) 100vw, 906px" />
</p>
<p>
  带有子表达式的例子：
</p>
<p>
  <img loading="lazy" decoding="async" width="1037" height="197" src="/wp-content/uploads/2018/05/word-image-2672.png" class="wp-image-3044" srcset="/wp-content/uploads/2018/05/word-image-2672.png 1037w, /wp-content/uploads/2018/05/word-image-2672-300x57.png 300w, /wp-content/uploads/2018/05/word-image-2672-768x146.png 768w, /wp-content/uploads/2018/05/word-image-2672-1024x195.png 1024w" sizes="(max-width: 1037px) 100vw, 1037px" />
</p>
<p>
  2、preg_match_all();
</p>
<p>
  执行正则表达式的全局匹配
</p>
<p>
  <img loading="lazy" decoding="async" width="826" height="95" src="/wp-content/uploads/2018/05/word-image-2673.png" class="wp-image-3045" srcset="/wp-content/uploads/2018/05/word-image-2673.png 826w, /wp-content/uploads/2018/05/word-image-2673-300x35.png 300w, /wp-content/uploads/2018/05/word-image-2673-768x88.png 768w" sizes="(max-width: 826px) 100vw, 826px" />
</p>
<p>
  查看匹配情况（不带子表达式）：
</p>
<p>
  <img loading="lazy" decoding="async" width="1007" height="262" src="/wp-content/uploads/2018/05/word-image-2674.png" class="wp-image-3046" srcset="/wp-content/uploads/2018/05/word-image-2674.png 1007w, /wp-content/uploads/2018/05/word-image-2674-300x78.png 300w, /wp-content/uploads/2018/05/word-image-2674-768x200.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" />
</p>
<p>
  查看匹配情况（带子表达式）：
</p>
<p>
  <img loading="lazy" decoding="async" width="963" height="464" src="/wp-content/uploads/2018/05/word-image-2675.png" class="wp-image-3047" srcset="/wp-content/uploads/2018/05/word-image-2675.png 963w, /wp-content/uploads/2018/05/word-image-2675-300x145.png 300w, /wp-content/uploads/2018/05/word-image-2675-768x370.png 768w" sizes="(max-width: 963px) 100vw, 963px" />
</p>
<p>
  3、preg_replace();
</p>
<p>
  <img loading="lazy" decoding="async" width="890" height="155" src="/wp-content/uploads/2018/05/word-image-2676.png" class="wp-image-3048" srcset="/wp-content/uploads/2018/05/word-image-2676.png 890w, /wp-content/uploads/2018/05/word-image-2676-300x52.png 300w, /wp-content/uploads/2018/05/word-image-2676-768x134.png 768w" sizes="(max-width: 890px) 100vw, 890px" />
</p>
<p>
  案例：解决贪婪问题？
</p>
<p>
  <img loading="lazy" decoding="async" width="880" height="422" src="/wp-content/uploads/2018/05/word-image-2677.png" class="wp-image-3049" srcset="/wp-content/uploads/2018/05/word-image-2677.png 880w, /wp-content/uploads/2018/05/word-image-2677-300x144.png 300w, /wp-content/uploads/2018/05/word-image-2677-768x368.png 768w" sizes="(max-width: 880px) 100vw, 880px" />
</p>
<p>
  4、php中匹配中文
</p>
<p>
  <img loading="lazy" decoding="async" width="1007" height="320" src="/wp-content/uploads/2018/05/word-image-2678.png" class="wp-image-3050" srcset="/wp-content/uploads/2018/05/word-image-2678.png 1007w, /wp-content/uploads/2018/05/word-image-2678-300x95.png 300w, /wp-content/uploads/2018/05/word-image-2678-768x244.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%89%8d%e7%ab%af%e6%8a%80%e6%9c%af/3000.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
