From b2a3c95ae6d1450509876fc2159be90fef2141e6 Mon Sep 17 00:00:00 2001 From: dong-shilong <1526568040@qq.com> Date: Mon, 13 Dec 2021 07:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=99=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...50\345\215\225\346\223\215\344\275\234.md" | 47 +++++ .../20211130-Ajax.md" | 127 ++++++++++++ .../20211202-promise.md" | 113 ++++++++++ ...jq\351\200\211\346\213\251\345\231\250.md" | 196 ++++++++++++++++++ ...42\343\200\201\350\277\207\346\273\244.md" | 62 ++++++ ...347\232\204dom\346\223\215\344\275\234.md" | 83 ++++++++ 6 files changed, 628 insertions(+) create mode 100644 "\350\221\243\344\270\226\351\276\231/20211129-\350\241\250\345\215\225\346\223\215\344\275\234.md" create mode 100644 "\350\221\243\344\270\226\351\276\231/20211130-Ajax.md" create mode 100644 "\350\221\243\344\270\226\351\276\231/20211202-promise.md" create mode 100644 "\350\221\243\344\270\226\351\276\231/20211203-jq\351\200\211\346\213\251\345\231\250.md" create mode 100644 "\350\221\243\344\270\226\351\276\231/20211206-jq\346\237\245\350\257\242\343\200\201\350\277\207\346\273\244.md" create mode 100644 "\350\221\243\344\270\226\351\276\231/20211207-jq\347\232\204dom\346\223\215\344\275\234.md" diff --git "a/\350\221\243\344\270\226\351\276\231/20211129-\350\241\250\345\215\225\346\223\215\344\275\234.md" "b/\350\221\243\344\270\226\351\276\231/20211129-\350\241\250\345\215\225\346\223\215\344\275\234.md" new file mode 100644 index 0000000..61efdb2 --- /dev/null +++ "b/\350\221\243\344\270\226\351\276\231/20211129-\350\241\250\345\215\225\346\223\215\344\275\234.md" @@ -0,0 +1,47 @@ +## 获得表单引用 + +1>通过直接定位的方式来获取 + +document.getElementById(); +document.getElementsByName(); +document.getElementsByTagName(); +2>通过集合的方式来获取引用 + +document.forms[下标] +document.forms["name"] +document.forms.name +3>通过name直接获取“(只适用于表单) + +document.name +二、获得表单元素的引用 + +1>直接获取 + +document.getElementById(); +document.getElementsByName(); +document.getElementsByTagName(); +2>通过集合来获取 + +表单对象.elements 获得表单里面所有元素的集合 +表单对象.elements[下标] +表单对象.elements["name"] +表单对象.elements.name +3>直接通过name的形式 + +表单对象.name + +三、表单元素共同的属性和方法 + +1>获取表单元素的值 + +表单元素对象.value 获取或是设置值 + +2>属性 + +disabled 获取或设置表单控件是否禁用 true false +form 指向包含本元素的表单的引用 + +3>方法 + +blur()失去焦点 +focus() 获得焦点 \ No newline at end of file diff --git "a/\350\221\243\344\270\226\351\276\231/20211130-Ajax.md" "b/\350\221\243\344\270\226\351\276\231/20211130-Ajax.md" new file mode 100644 index 0000000..fc441a1 --- /dev/null +++ "b/\350\221\243\344\270\226\351\276\231/20211130-Ajax.md" @@ -0,0 +1,127 @@ +## Ajax +### 实现 Ajax 的步骤 +1.创建 Ajax 核心对象(XMLHttpRequest) +2.通过 Ajax 核心对象的 open() 方法建立与服务端的链接 +3.构建请求的数据内容,通过核心对象的 send() 方法发送给服务端 +4.通过核心对象提供的 onreadystatechange 事件,监听服务端的通信状态 +5.接受处理服务端响应的结果 +6.将结果更新到页面 +### 创建 XMLHttpRequest 对象 +由于创建 Ajax 对象的方式在浏览器之间存在不同的情况所以需要编写一个自定义 js 文件来实现浏览器兼容。 +创建 Ajax 对象的方法为:new XMLHttpRequest(), +### 要实现和使用XMLHttpRequest +它是一个对象,首先我们需要实例化,定义一个: +``` +var xhr = new XMLHttpRequest(); +``` +### 初始化请求,给定一些必要的配置,给它一些属性 +``` + //Ajax请求时的参数设置 + method 请求方式 + url 请求地址 + async 是否异步 + user 用户名 + password 密码 + + xhr.open(method,url,async,user,password); +``` + ### 发送请求(encodeURLComponent) + ``` + xhr.send(data); + 等待接收 +``` +### 接收网络请求返回 +一般有如下属性: + +1.responseText,请求返回的数据内容,可以是一段文本,是一段二进制或者是一个json +2.responseXML,是一个文件,如果响应头内容是text/xml,这个属性将保留响应数据的XML、DOM文档。 +3.status,响应的HTTP状态,如 200(正常,200-300之间都表示成功) 304(使用缓存) 404(没找到) 500(服务器内部错误)等 +4.statusText,HTTP状态说明 +5.readyStatus,请求/响应过程的当前活动阶段,一共有5个值:0(未被调用open),1(已被调用open但未发送),2(已调用send),3(已接收到请求返回的数据),4(请求已完成)。 +6.timeout,设置请求超时时间 +``` + xhr.onreadystatechange = () => { + if (xhr.readyStatus === 4) { + /* HTTP 状态在 200-300 之间表示请求成功 */ + /* HTTP 状态为 304 表示请求内容未发生改变,可直接从缓存中读取 */ + if (xhr.status >= 200 && + xhr.status < 300 || + xhr.status == 304) { + console.log('请求成功', xhr.responseText) + } + } + } +``` +### 封装(promise) +``` + function ajax (options) { + /* 获取请求地址 */ + let url = options.url; + /* 获取请求方法 */ + const method = options.method.toLocaleLowerCase() || 'get'; + /* 默认异步 */ + const async = options.async != false; + /* 获取请求request数据 */ + const data = options.data; + /* 实例化XMLHttpRequest */ + const xhr = new XMLHttpRequest(); + /* 设置超时时间 */ + if (options.timeout && options.timeout > 0) { + xhr.timeout = options.timeout + } + + return new Promise ( (resolve, reject) => { + /* 添加超时回调 */ + xhr.ontimeout = () => reject && reject('请求超时'); + /* 成功回调 */ + xhr.onreadystatechange = () => { + if (xhr.readyState == 4) { + if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { + resolve && resolve(xhr.responseText); + } else { + reject && reject(); + } + } + } + + /* 失败回调 */ + xhr.onerror = err => reject && reject(err); + + /* 拼接参数 */ + let paramArr = []; + let encodeData; + if (data instanceof Object) { + for (let key in data) { + paramArr.push( encodeURIComponent(key) + '=' + encodeURIComponent(data[key]) ); + } + encodeData = paramArr.join('&'); + } + + /* get请求 */ + if (method === 'get') { + const index = url.indexOf('?') + if (index === -1) url += '?' + else if (index !== url.length -1) url += '&' + url += encodeData + } + + /* 初始化请求 */ + xhr.open(method, url, async); + + /* get直接发送拼接的URL */ + if (method === 'get') xhr.send(null); + + if (method === 'post') { + xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8') + xhr.send(encodeData) + } + }) + } +``` +### 总结: +关于网络请求,一般常用的有四种: + +1.一个是get,获取网络资源 +2.然后是post,一般用于提交数据,提交数据的参数是放在请求的body里面的 +3.delete,删除 +4.put,标准的一个修改 \ No newline at end of file diff --git "a/\350\221\243\344\270\226\351\276\231/20211202-promise.md" "b/\350\221\243\344\270\226\351\276\231/20211202-promise.md" new file mode 100644 index 0000000..dcf1acb --- /dev/null +++ "b/\350\221\243\344\270\226\351\276\231/20211202-promise.md" @@ -0,0 +1,113 @@ +## Promise +#### 1.概述 +Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件。ES6统一了用法,并原生提供了Promise对象。作为对象,Promise有以下两个特点: +``` + (1)对象的状态不受外界影响。 + (2)一旦状态改变了就不会在变,也就是说任何时候Promise都只有一种状态。 +``` +#### 2.Promise的三个状态: +``` +(1)Pending-promise的初始状态,等到任务完成或是被拒绝 +(2)Resolved-执行完成并且成功的状态 +(3)Rejected-执行完成并且失败的状态。 +``` +### 注意:此三个状态不能相互逆转。 +#### 3.基本用法 +<1> 可以通过Promise的构造函数创建Promise对象。 +例子 +``` +function greet(){ + var promise = new Promise(function(resolve,reject){ + var greet = "啊对对对"; + resolve(greet); + }); + return promise; + } + greet().then(v=>{ + console.log(v);//* + }) + 上面的*行的输出结果就是greet的值,也就是resolve()传递出来的参数。 +``` +### 注意:创建一个Promise对象会立即执行里面的代码,所以为了更好的控制代码的运行时刻,可以将其包含在一个函数中,并将这个Promise作为函数的返回值。 +<2>Promise的then方法 + Promise实例生成后,可用then方法分别指定两种状态回调参数。then 方法可以接受两个回调函数作为参数: +``` +(1)Promise对象状态改为Resolved时调用 (必选) +(2)Promise对象状态改为Rejected时调用 (可选) +``` +例子: +``` +let pi = 3.14; + +let p =new Promise(function (resolve, reject){ + console.log(`老师来了`); + resolve(10) +}); + +function add(x) { + return new Promise(function (resolve, reject) { + console.log(`啊对对对,我在算加法中x,现在x=${x}`); + setTimeout(resolve,800,x+x) + }, ); + } + +function multipx(x) { + return new Promise(function (resolve, reject) { + console.log(`啊对对对,我在算面积中,现在x=${pi}`); + setTimeout(resolve,1000,pi*x*2) + }, ); + } + +p.then(add) + .then(multipx) + .then((x) =>{ + console.log(`完成任务`); + console.log(x); + }) +``` +#### .then后包含有两个方法,前一个执行resolve回调的参数,后一个执行reject回调的参数。 +<3>promise的catch方法 +``` +function judgeNumber(num){ + var promise1 = new Promise(function(resolve,reject){ + num =5; + if(num<5){ + resolve("num小于5,值为:"+num); + }else{ + reject("num不小于5,值为:"+num); + } + }); + return promise1; +} + +judgeNumber().then( + function(message){ + console.log(message); + } +) +.catch(function(message){ + console.log(message); +}) +``` +#### catchd的作用就是如果Promise的状态变为reject时,会被catch捕捉到,不过需要特别注意的是如果前面设置了reject方法的回调函数,则catch不会捕捉到状态变为reject的情况。catch还有一点不同的是,如果在resolve或者reject发生错误的时候,会被catch捕捉到。 +### 总结 +1.Promise就是一个函数,JS中任何结构都是对象,可以通过Promise的构造函数创建Promise对象。 +2.Promise对象会立即执行里面的代码 +3.Promise中的任务可以按顺序完成 +例: +p.then(p1) + .then(p2) + .then(p3) +其中,p1,p2,p3都是对象 +4.代码的解析 +``` + resolve 是执行成功 + + reject 是执行失败 + + .then() 递延处理 + + .catch() 异常捕捉 + + 使用setTimeout 模拟异步 +``` diff --git "a/\350\221\243\344\270\226\351\276\231/20211203-jq\351\200\211\346\213\251\345\231\250.md" "b/\350\221\243\344\270\226\351\276\231/20211203-jq\351\200\211\346\213\251\345\231\250.md" new file mode 100644 index 0000000..2a6384c --- /dev/null +++ "b/\350\221\243\344\270\226\351\276\231/20211203-jq\351\200\211\346\213\251\345\231\250.md" @@ -0,0 +1,196 @@ +## jQuery +1、什么是jQuery? +jQuery 是一个 JavaScript 函数库。 +2.jQuery的选择器 +选择器是jQuery的核心。一个选择器写出来类似$('#dom-id')。 +### 使用jQuery +使用jQuery只需要在页面的
引入jQuery文件即可: +#### 注意:jQuery必须在其它JavaScript的上面 +栗子: +``` + + + ··· + + + + + + +``` + +### $符号 +$是著名的jQuery符号。实际上,jQuery把所有功能全部封装在一个全局变量jQuery中,而$也是一个合法的变量名,它是变量jQuery的别名: +``` +window.jQuery; // jQuery(selector, context) +window.$; // jQuery(selector, context) +$ === jQuery; // true +typeof($); // 'function' +``` +$本质上是一个函数,同时也是对象,所以$除了可以直接调用外,还有其它属性。 +## 几个基本选择器及操作 +#### (1)按ID查找 +如果某个DOM节点有id属性,利用jQuery查找如下: +``` +// 查找节点 +ps.length; // 数一数页面有多少个
节点 +``` +### 按class查找 +按class查找注意在class名称前加一个.: +``` +var a = $('.red'); // 所有节点包含`class="red"`都将返回 +// 例如: +//
...
+``` +通常很多节点有多个class,我们可以查找同时包含red和green的节点: +``` +var a = $('.red.green'); // 注意没有空格! +// 符合条件的节点: +//和
和
都选出来 +``` +要注意的是,选出来的元素是按照它们在HTML中出现的顺序排列的,而且不会有重复元素。例如,`
`不会被上面的`$('p.red,p.green')`选择两次。 +## 更多选择器 +(https://www.w3school.com.cn/jquery/jquery_ref_selectors.asp jQuery的选择器) +### 练习 +使用jQuery选择器分别选出指定元素: + ++ 仅选择JavaScript + ++ 仅选择Erlang + ++ 选择JavaScript和Erlang + ++ 选择所有编程语言 + ++ 选择名字input + ++ 选择邮件和名字input +``` + +
JavaScript
+Haskell
+Erlang
+Python
+ +