diff --git a/04-前端基础练习/07-DOM操作练习:innerHTML的方式创建元素.md b/04-前端基础练习/07-DOM操作练习:innerHTML的方式创建元素.md index 2dd366f..079cbe2 100644 --- a/04-前端基础练习/07-DOM操作练习:innerHTML的方式创建元素.md +++ b/04-前端基础练习/07-DOM操作练习:innerHTML的方式创建元素.md @@ -4,9 +4,9 @@ - `document.write();` 不常用,因为容易覆盖原来的页面。 -- `innerHTML;` 用的比较多。绑定属性和内容比较方便。(节点套节点) +- `innerHTML = ();` 用的比较多。绑定属性和内容比较方便。(节点套节点) -- `document.createElement;` 用得也比较多,指定数量的时候一般用它。 +- `document.createElement();` 用得也比较多,指定数量的时候一般用它。 **1、方式一:** diff --git a/07-jQuery/01-jQuery的介绍和选择器.md b/07-jQuery/01-jQuery的介绍和选择器.md index fe6447d..b9baed6 100644 --- a/07-jQuery/01-jQuery的介绍和选择器.md +++ b/07-jQuery/01-jQuery的介绍和选择器.md @@ -42,7 +42,7 @@ js库是把我们常用的功能放到一个单独的文件中,我们用的时 - 官网API文档: -- 汉化API文档: +- 中文汉化API文档: ### 学习jQuery,主要是学什么 @@ -122,9 +122,22 @@ js库是把我们常用的功能放到一个单独的文件中,我们用的时 ### jQuery 的两大特点 -- 链式编程:比如`.show()`和`.html()`可以连写成`.show().html()`。 +(1)**链式编程**:比如`.show()`和`.html()`可以连写成`.show().html()`。 + + +链式编程原理:return this。 + +通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 this。 + + +(2)**隐式迭代**:隐式 对应的是 显式。隐式迭代的意思是:在方法的内部会为匹配到的所有元素进行循环遍历,执行相应的方法;而不用我们再进行循环,简化我们的操作,方便我们调用。 + +如果获取的是多元素的值,大部分情况下返回的是第一个元素的值。 + + + + -- 隐式迭代:隐式 对应的是 显式。隐式迭代的意思是:在方法的内部进行循环遍历,而不用我们自己再进行循环,简化我们的操作,方便我们调用。 ## jQuery 的使用 diff --git a/07-jQuery/02-jQuery动画详解.md b/07-jQuery/02-jQuery动画详解.md index c75da9a..784c5bb 100644 --- a/07-jQuery/02-jQuery动画详解.md +++ b/07-jQuery/02-jQuery动画详解.md @@ -516,6 +516,82 @@ PS:参数如果都不写,默认两个都是false。实际工作中,直接 注意:如果元素动画还没有执行完,此时调用sotp()方法,那么动画将会停止。并且动画没有执行完成,那么回调函数也不会被执行。 + +## 举例:右下角的弹出广告 + +代码实现: + +```html + + + + + + + + + + + + + +
我是内容
+
+ +
+ + + + +``` + +效果如下: + +20180205_2000.gif + + ## 我的公众号 想学习**代码之外的软技能**?不妨关注我的微信公众号:**生命团队**(id:`vitateam`)。 diff --git a/07-jQuery/03-jQuery操作DOM.md b/07-jQuery/03-jQuery操作DOM.md index fc0d7ee..8e1f27e 100644 --- a/07-jQuery/03-jQuery操作DOM.md +++ b/07-jQuery/03-jQuery操作DOM.md @@ -4,9 +4,7 @@ ## 文本主要内容  - 样式和类操作 - -- jQuery 动画 - + - 节点操作 @@ -322,30 +320,658 @@ $(selector).toggleClass(“liItem”); //为指定元素切换类 className -```javascript +## jQuery 的节点操作 + + +### 动态创建元素 + +原生 js 有[三种动态创建元素](07-DOM操作练习:innerHTML的方式创建元素.md)的方式。这里我们学一下 jQuery 动态创建元素。**注意,创建的是 jQuery 对象**。 + +方式一: + +```javascript + var $spanNode1 = $("我是一个span元素"); // 返回的是 jQuery对象 +``` + +此方法类似于 原生 js 中的`document.createElement("标签名");` + +方式二:(推荐) + + +```javascript + var node = $("#box").html("
  • 我是li
  • "); +``` + +此方法类似于 原生 js 中的`innerHTML`。 + +举例: + +```javascript + //方式一: $("标签") :类比于js中的document.createElement("li"); + console.log($("
  • 我是li标签
  • ")); + + //方式二: $("ul").html(""); :类比innerHTML属性。因为此属性,识别标签。 + $("ul").html("
  • 我是html方法穿件出来的li标签
  • ") +``` + + +### 添加元素 + +jQuery 添加元素的方法非常多,最重要的方法是`append()`。格式如下: + + +```javascript +// 方式一:在$(selector)中追加$node +$(selector).append($node); //参数是 jQuery对象 + +// 方式二:在$(selector)中追加div元素, +$(selector).append('
    '); //参数是 htmlString ``` +作用:在被选元素内部的最后一个子元素(或内容)后面插入内容(存在或者创建出来的元素都可以)。 +通俗的解释:**在盒子里的最末尾添加元素**。 + +- 如果是页面中存在的元素,那调用append()后,会把这个元素放到相应的目标元素里面去;但是,原来的这个元素,就不存在了。 + +- 如果是给多个目标追加元素,那么方法的内部会复制多份这个元素,然后追加到多个目标里面去。 + + +举例: + +```html + + + + + + + + + + + +
      +
    • 我是土著li
    • +
    + + + +``` + + +效果: + +20180205_2020.gif + + +**其他的添加元素的方法:** + + +方法2: + +```javascript + $(selector).appendTo(node); +``` + +作用:同append(),只不过是反着写的。 + +方法3: + +```javascript + $(selector).prepend(node); +``` + +作用:在元素的第一个子元素前面追加内容或节点。 + +方法4: + +```javascript + $(selector).after(node); +``` + +作用:在被选元素之后,作为**兄弟元素**插入内容或节点。 + +**方法5:** + +```javascript + $(selector).before(node); +``` + +作用:在被选元素之前,作为**兄弟元素**插入内容或节点。 + + +### 清空元素 + +方式一:没有参数 + + +```javascript + $(selector).empty(); + $(selector).html(""); +``` + + +解释:清空指定元素的所有子元素(光杆司令)。 + +方式二: + +// + + +```javascript + $(selector).remove(); +``` + +解释:“自杀” 。把自己以及所有的内部元素从文档中删除掉。 + +### 复制元素 + + +格式: + + +```javascript + 复制的新元素 = $(selector).clone(); +``` + +解释:复制$(selector)这个元素。是深层复制。 + +### 总结 + +推荐使用 `html("")` 方法来创建元素或者 `html("")` 清空元素。 + +### 案例:选择水果 + +完整版代码: + +```html + + + + + + + + + + + + + + + + + + + +``` + +效果: + +20180205_2040.gif + +### 案例:动态添加表格项 + +代码如下: ```html + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    标题地址说明
    + + + ``` +实现的效果: + +20180205_2045.gif + +代码解释:每次生成字符串str之前,记得先把之前的str清空,不然每次点击按钮,都会继续添加表格项。 + + +### 将上一个案例进一步提升:点击按钮,添加数据 + +暂略。 + +## jQuery 设置和获取属性 + +jQuery 无法直接操作节点的属性和src等,我们需要借助attr()方法。下面介绍。 + +### 属性操作 + +**(1)设置属性:** + +```javascript + $(selector).attr("title", "生命壹号"); +``` + +参数解释:第一个参数表示:要设置的属性名称。第二个参数表示:该属性名称对应的值。 + +**(2)获取属性:** + +```javascript + $(selector).attr("title"); +``` + +参数为:要获取的属性的名称,返回指定属性对应的值。 + +**总结**:两个参数是给属性赋值,单个参数是获取属性值。 + + +**(3)移除属性:** + + +```javascript + $(selector).removeAttr("title"); +``` + +参数为:要移除的属性的名称。 + +(4)form表单中的 `prop()`方法: + +针对`checked、selected、disabled`属性,要使用 `prop()`方法,而不是其他的方法。 + +prop方法通常用来影响DOM元素的动态状态,而不是改变的HTML属性。例如:input和button的disabled特性,以及checkbox的checked特性。 + + +总结:细节可以参考:。 + +以上四项的代码演示: + + +```html + + + + + + + + + + + + + + + + +``` + +效果: + +20180205_2115.gif + +**案例:表格案例全选反选** + +完整版代码: + +```html + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 课程名称所属团队
    + + JavaScript生命团队
    + + css生命团队
    + + html生命团队
    + + jQuery生命团队
    +
    + + + + +``` + + +### val()方法和 text()方法 + + +```javascript + $(selector).val(); +``` + +作用:设置或返回 form 表单元素的value值,例如:input、select、textarea 的值。 + + +```javascript + $(selector).text(); +``` + +作用:设置或获取匹配元素的文本内容。不带参数表示,会把所有匹配到的元素内容拼接为一个**字符串**,不同于其他获取操作。 + ```javascript - - + $(selector).text(“我是内容”); ``` +作用:设置的内容包含html标签,那么text()方法会把他们当作**纯文本**内容输出。 + +总结: + +- text() 不识别标签。 + +- html() 识别标签。 + +举例: + + @@ -353,45 +979,49 @@ $(selector).toggleClass(“liItem”); //为指定元素切换类 className ```html + + + + + + + + + + +
    +
  • 你好
  • +
    + + ``` +打印结果: - -```javascript - - -``` +20180205_2139.png - - - - - -```html - - -``` - - - - -```javascript - - -``` - - - - - - -``` - -``` - - diff --git a/07-jQuery/04-jQuery的事件机制和其他知识.md b/07-jQuery/04-jQuery的事件机制和其他知识.md new file mode 100644 index 0000000..0a38441 --- /dev/null +++ b/07-jQuery/04-jQuery的事件机制和其他知识.md @@ -0,0 +1,778 @@ + + + +## jQuery 设置宽度和高度 + +宽度操作: + +```javascript + $(selector).height(); //不带参数表示获取高度 + $(selector).height(200); //带参数表示设置高度 +``` + + +宽度操作: + + +```javascript + $(selector).width(); //不带参数表示获取宽度 + $(selector).width(200); //带参数表示设置高宽度 +``` + + +**问题**:jQuery的css()获取高度,和jQuery的height获取高度,二者的区别? + +答案: + + +```javascript + $("div").css(); //返回的是string类型,例如:30px + + $("div").height(); //返回得失number类型,例如:30。常用于数学计算。 +``` + +如上方代码所示,`$("div").height();`返回的是number类型,常用于数学计算。 + + +## jQuery 的坐标操作 + + +### offset()方法 + + +```javascript + $(selector).offset(); + $(selector).offset({left:100, top: 150}); +``` + +作用:获取或设置元素相对于 document 文档的位置。参数解释: + +- 无参数:表示获取。返回值为:{left:num, top:num}。返回值是相对于document的位置。 + +- 有参数:表示设置。参数建议使用 number 数值类型。 + +注意:设置offset后,如果元素没有定位(默认值:static),则被修改为relative。 + +### position()方法 + +```javascript + $(selector).position(); +``` + +作用:获取相对于其最近的**带有定位**的父元素的位置。返回值为对象:`{left:num, top:num}`。 + +注意:只能获取,不能设置。 + + + +### scrollTop()方法 + + +```javascript + scrollTop(); + $(selector).scrollTop(100); +``` + +作用:获取或者设置元素被卷去的头部的距离。参数解释: + +- 无参数:表示获取偏移。 + +- 有参数:表示设置偏移,参数为数值类型。 + + +### scrollLeft()方法 + + + +```javascript + scrollLeft(); + $(selector).scrollLeft(100); +``` + +作用:获取或者设置元素水平方向滚动的位置。参数解释: + +- 无参数:表示获取偏移。 + +- 有参数:表示设置偏移,参数为数值类型。 + +代码示范: + +```html + + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + +``` + +## jQuery的事件机制 + +### 常见的事件绑定 + +- click(handler) 单击事件。 + +- blur(handler) 失去焦点事件。 + +- mouseenter(handler) 鼠标进入事件。 + +- mouseleave(handler) 鼠标离开事件。 + +- dbclick(handler) 双击事件。 + +- change(handler) 改变事件,如:文本框值改变,下拉列表值改变等。 + +- focus(handler) 获得焦点事件。 + +- keydown(handler) 键盘按下事件。 + +参考链接: + +### on方式绑定事件 + +最早采用的是 bind、delegate等方式绑定的。jQuery 1.7版本后,jQuery用on统一了所有的事件处理的方法,此方法兼容zepto(移动端类似于jQuery的一个库)。 + +格式举例: + + +```javascript + $(document).on("click mouseenter", ".box", {"name": 111}, function (event) { + console.log(event.data); //event.data获取的就是第三个参数这个json。 + console.log(event.data.name); //event.data.name获取的是name的值。 + }); +``` + +参数解释: + +- 第一个参数:events,绑定事件的名称可以是由空格分隔的多个事件(标准事件或者自定义事件)。上方代码绑定的是单击事件和鼠标进入事件。 + +- 第二个参数:selector, 执行事件的后代元素。 + +- 第三个参数:data,传递给事件处理函数的数据,事件触发的时候通过event.data来使用(也就是说,可以通过event拿到data) + +- 第四个参数:handler,事件处理函数。 + + +简单点的写法: + +```javascript + $(document).on("click",".box", function () { + alert(1); + }); +``` + +### off方式解绑事件 + +```javascript + $(selector).off(); // 解绑匹配元素的所有事件 + + $(selector).off("click"); // 解绑匹配元素的所有click事件 + + $(selector).off( “click”, "**" ); // 解绑所有代理的click事件,元素本身的事件不会被解绑 +``` + +## jQuery的事件对象 + +event.data 传递给事件处理程序的额外数据 + +event.currentTarget 等同于this,当前DOM对象 + +event.pageX 鼠标相对于文档左部边缘的位置 + +event.target 触发事件源,不一定===this + +event.stopPropagation(); 阻止事件冒泡 + +event.preventDefault(); 阻止默认行为 + +event.type 事件类型:click,dbclick… + +event.which 鼠标的按键类型:左1 中2 右3 + +event.keyCode 键盘按键代码 + + +代码演示: + +```html + + + + + + + + + + + + +``` + +上方代码中,我们通过event参数,获取了点击事件的各种event里的属性。 + + +单击网页后,打印结果为: + +20180205_2338.png + + +**举例**:键盘上对的按键按下时,变色 + +这个时候就要用到event参数,因为要获取event.keyCode,才能知道按下的是键盘上的哪个按键。 + +代码实现: + +```html + + + + + + + + + + + + + +
    +

    按键改变颜色

    +
    + keyCode为: + 80 +
    +
    + + + + +``` + + + +## jQuery 的两大特点 + +(1)**链式编程**:比如`.show()`和`.html()`可以连写成`.show().html()`。 + + +链式编程原理:return this。 + +通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 this。 + +```javascript + end(); // 结束当前链最近的一次过滤操作,并且返回匹配元素之前的状态。 +``` + + + + + + + + +(2)**隐式迭代**:隐式 对应的是 显式。隐式迭代的意思是:在方法的内部会为匹配到的所有元素进行循环遍历,执行相应的方法;而不用我们再进行循环,简化我们的操作,方便我们调用。 + +如果获取的是多元素的值,大部分情况下返回的是第一个元素的值。 + + +**举例:**五角星评分 + +```html + + + + + 五角星评分案例 + + + + + +
      +
    • +
    • +
    • +
    • +
    • +
    + + + +``` + + +上方代码中,注意end的用法,很巧妙。 + +实现效果: + + +20180206_1100.gif + + + + +## each的用法 + +大部分情况下是不需要使用each方法的,因为jQuery的隐式迭代特性。 + +但是,如果要对每个元素做不同的处理,这时候就用到了each方法。 + +格式如下: + + +```javascript + $(selector).each(function(index,element){}); +``` + +参数解释: + +- 参数一:表示当前元素在所有匹配元素中的索引号 + +- 参数二:参数二表示当前元素(是js 中的DOM对象,而不是jQuery对象) + + +举例: + +```html + + + + + + + + + + + +
      +
    • 1
    • +
    • 2
    • +
    • 3
    • +
    • 4
    • +
    • 5
    • +
    • 6
    • +
    • 7
    • +
    • 8
    • +
    • 9
    • +
    • 10
    • +
    + + + +``` + +效果如下: + +20180206_1110.png + +## 多库共存 + +**多库共存**指的是:jQuery占用了 `$` 和 `jQuery` 这两个变量。当在同一个页面中引用了 jQuery 库以及其他的库(或者其他版本的jQuery库),恰好其他的库中也用到了 `$` 或者`jQuery`变量.那么,要保证每个库都能正常使用,就产生了多库共存的问题。 + +温馨提示:我们可以通过以下方式获取 jQuery 库的版本号。 + +```javascript + console.log($.fn.jquery); //打印 jQuery 库的版本号 +``` + +**办法一**:让 jQuery 放弃对 `$` 的使用权: + +```javascript + $.noConflict(); +``` + +效果如下: + +20180206_1126.png + +上图中,代码中同时包含了两个版本的库。1.11.1版本放弃了对 `$` 的使用权,交给了1.8.2版本;但是1.11.1版本并没有放弃对 `jQuery`关键字的使用权。 + + +办法二:同时放弃放弃两个符号的使用权,并定义一个新的使用权(如果有三个库时,可以这样用) + +```javascript + $.noConflict(true); //返回值是新的关键字 +``` + +效果如下: + +20180206_1133.png + + +## jQuery 的插件机制 + + +jQuery 库,虽然功能强大,但也不是面面俱到。jQuery 是通过插件的方式,来扩展它的功能: + +- 当你需要某个插件的时候,你可以“安装”到jQuery上面,然后使用。 + +- 当你不再需要这个插件,那你就可以从jQuery上“卸载”它。 + + +### 插件之改变颜色 + +jQuery的自定义动画方法animate(),在执行动画时,是不支持设置背景色这个属性的。这个时候可以借助`jQuery.color.js`这个插件。 + + +举例: + +```html + + + + + + + + + + + + +
    + + +``` + + +效果: + +20180206_1400.gif + +上方代码中,因为加入了一行插件:(注意顺序是放在jQuery插件之后) + +```html + +``` + +否则的话,在动画执行的过程中,是无法设置背景色的。 + + + +### 插件之懒加载 + +懒加载:当打开一个网页时,只有我看到某个部分,再加载那个部分;而不是一下子全部加载完毕。这样可以优化打开的速度。 + +比如说,我可以设置一张图片为懒加载,于是,这张图片会等我宠幸到它的时候,它再打开。 + + +代码举例: + +```html + + + + + + + + + + + + +
    + + + + +``` +