SOURCE

console 命令行工具 X clear

                    
>
console
const data = [
  {
    "page": 1,

    "part": "001.尚硅谷_HTML和CSS-引课",
    "duration": 97
  },
  {
    "page": 2,

    "part": "002.尚硅谷_HTML和CSS-BS软件的结构",
    "duration": 52
  },
  {
    "page": 3,

    "part": "003.尚硅谷_HTML和CSS-前端的开发流程",
    "duration": 59
  },
  {
    "page": 4,

    "part": "004.尚硅谷_HTML和CSS-网页的组成部分",
    "duration": 85
  },
  {
    "page": 5,

    "part": "005.尚硅谷_HTML和CSS-HTML简介",
    "duration": 47
  },
  {
    "page": 6,

    "part": "006.尚硅谷_HTML和CSS-创建HTML页面",
    "duration": 271
  },
  {
    "page": 7,

    "part": "007.尚硅谷_HTML和CSS-html的书写规范",
    "duration": 362
  },
  {
    "page": 8,

    "part": "008.尚硅谷_HTML和CSS-HTML标签的介绍",
    "duration": 431
  },
  {
    "page": 9,

    "part": "009.尚硅谷_HTML和CSS-HTML标签的语法",
    "duration": 302
  },
  {
    "page": 10,

    "part": "010.尚硅谷_HTML和CSS-font标签",
    "duration": 302
  },
  {
    "page": 11,

    "part": "011.尚硅谷_HTML和CSS-特殊字符",
    "duration": 282
  },
  {
    "page": 12,

    "part": "012.尚硅谷_HTML和CSS-标题标签h1 - h6",
    "duration": 185
  },
  {
    "page": 13,

    "part": "013.尚硅谷_HTML和CSS-超连接标签",
    "duration": 267
  },
  {
    "page": 14,

    "part": "014.尚硅谷_HTML和CSS-无序列表",
    "duration": 350
  },
  {
    "page": 15,

    "part": "015.尚硅谷_HTML和CSS-img标签",
    "duration": 779
  },
  {
    "page": 16,

    "part": "016.尚硅谷_HTML和CSS-table标签",
    "duration": 582
  },
  {
    "page": 17,

    "part": "017.尚硅谷_HTML和CSS-表格的跨行跨列",
    "duration": 299
  },
  {
    "page": 18,

    "part": "018.尚硅谷_HTML和CSS-ifarme标签介绍",
    "duration": 537
  },
  {
    "page": 19,

    "part": "019.尚硅谷_HTML和CSS-表单显示",
    "duration": 1259
  },
  {
    "page": 20,

    "part": "020.尚硅谷_HTML和CSS-表单格式化",
    "duration": 329
  },
  {
    "page": 21,

    "part": "021.尚硅谷_HTML和CSS-表单提交的细节",
    "duration": 1105
  },
  {
    "page": 22,

    "part": "022.尚硅谷_HTML和CSS-其他标签div、span、p",
    "duration": 216
  },
  {
    "page": 23,

    "part": "023.尚硅谷_HTML和CSS-CSS介绍",
    "duration": 80
  },
  {
    "page": 24,

    "part": "024.尚硅谷_HTML和CSS-CSS语法介绍",
    "duration": 144
  },
  {
    "page": 25,

    "part": "025.尚硅谷_HTML和CSS-CSS与HTML结合使用的第一种方式",
    "duration": 341
  },
  {
    "page": 26,

    "part": "026.尚硅谷_HTML和CSS-CSS与HTML结合使用的第二种方式",
    "duration": 299
  },
  {
    "page": 27,

    "part": "027.尚硅谷_HTML和CSS-CSS与HTML结合使用的第三种方式",
    "duration": 202
  },
  {
    "page": 28,

    "part": "028.尚硅谷_HTML和CSS-标签名选择器",
    "duration": 379
  },
  {
    "page": 29,

    "part": "029.尚硅谷_HTML和CSS-id选择器",
    "duration": 277
  },
  {
    "page": 30,

    "part": "030.尚硅谷_HTML和CSS-class类型选择器",
    "duration": 233
  },
  {
    "page": 31,

    "part": "031.尚硅谷_HTML和CSS-组合选择器",
    "duration": 179
  },
  {
    "page": 32,

    "part": "032.尚硅谷_HTML和CSS-css常用样式",
    "duration": 414
  },
  {
    "page": 33,

    "part": "033.尚硅谷_JavaScript-JavaScript介绍",
    "duration": 265
  },
  {
    "page": 34,

    "part": "034.尚硅谷_JavaScript-JavaScript与HTML结合使用的第一种方式",
    "duration": 124
  },
  {
    "page": 35,

    "part": "035.尚硅谷_JavaScript-JavaScript与HTML结合使用的第二种方式",
    "duration": 225
  },
  {
    "page": 36,

    "part": "036.尚硅谷_JavaScript-JavaScript的变量和数据类型介绍",
    "duration": 381
  },
  {
    "page": 37,

    "part": "037.尚硅谷_JavaScript-JavaScript的关系运算",
    "duration": 147
  },
  {
    "page": 38,

    "part": "038.尚硅谷_JavaScript-JavaScript的逻辑运算",
    "duration": 595
  },
  {
    "page": 39,

    "part": "039.尚硅谷_JavaScript-JavaScript的数组",
    "duration": 497
  },
  {
    "page": 40,

    "part": "040.尚硅谷_JavaScript-函数的第一种定义方式",
    "duration": 335
  },
  {
    "page": 41,

    "part": "041.尚硅谷_JavaScript-函数的第二种定义方式",
    "duration": 175
  },
  {
    "page": 42,

    "part": "042.尚硅谷_JavaScript-js中的函数不允许重载",
    "duration": 129
  },
  {
    "page": 43,

    "part": "043.尚硅谷_JavaScript-隐形参数arguments",
    "duration": 515
  },
  {
    "page": 44,

    "part": "044.尚硅谷_JavaScript-Object形式的自定义对象",
    "duration": 258
  },
  {
    "page": 45,

    "part": "045.尚硅谷_JavaScript-花括号形式的自定义对象",
    "duration": 246
  },
  {
    "page": 46,

    "part": "046.尚硅谷_JavaScript-事件介绍",
    "duration": 156
  },
  {
    "page": 47,

    "part": "047.尚硅谷_JavaScript-两种事件注册的介绍",
    "duration": 174
  },
  {
    "page": 48,

    "part": "048.尚硅谷_JavaScript-onload事件",
    "duration": 271
  },
  {
    "page": 49,

    "part": "049.尚硅谷_JavaScript-onclick事件",
    "duration": 330
  },
  {
    "page": 50,

    "part": "050.尚硅谷_JavaScript-onblur事件",
    "duration": 377
  },
  {
    "page": 51,

    "part": "051.尚硅谷_JavaScript-onchange事件",
    "duration": 296
  },
  {
    "page": 52,

    "part": "052.尚硅谷_JavaScript-onsubmit事件",
    "duration": 411
  },
  {
    "page": 53,

    "part": "053.尚硅谷_JavaScript-document对象概念介绍",
    "duration": 457
  },
  {
    "page": 54,

    "part": "054.尚硅谷_JavaScript-验证用户名是否有效",
    "duration": 761
  },
  {
    "page": 55,

    "part": "055.尚硅谷_JavaScript-正则表达式对象",
    "duration": 1397
  },
  {
    "page": 56,

    "part": "056.尚硅谷_JavaScript-两种常见的验证提示效果",
    "duration": 380
  },
  {
    "page": 57,

    "part": "057.尚硅谷_JavaScript-getElementsByName方法",
    "duration": 729
  },
  {
    "page": 58,

    "part": "058.尚硅谷_JavaScript-getElementsByTagName方法",
    "duration": 260
  },
  {
    "page": 59,

    "part": "059.尚硅谷_JavaScript-document对象三个查询方法的使用注意事项",
    "duration": 340
  },
  {
    "page": 60,

    "part": "060.尚硅谷_JavaScript-dom对象查询练习",
    "duration": 1249
  },
  {
    "page": 61,

    "part": "061.尚硅谷_JavaScript-document对象补充说明",
    "duration": 485
  },
  {
    "page": 62,

    "part": "062.尚硅谷_jQuery-jQuery介绍",
    "duration": 106
  },
  {
    "page": 63,

    "part": "063.尚硅谷_jQuery-jQuery的Hello程序示例",
    "duration": 448
  },
  {
    "page": 64,

    "part": "064.尚硅谷_jQuery-jQuery的Hello程序常见问题",
    "duration": 217
  },
  {
    "page": 65,

    "part": "065.尚硅谷_jQuery-jQuery的函数核心介绍",
    "duration": 521
  },
  {
    "page": 66,

    "part": "066.尚硅谷_jQuery-如何区分DOM对象和jQuery对象",
    "duration": 189
  },
  {
    "page": 67,

    "part": "067.尚硅谷_jQuery-jQuery对象的本质",
    "duration": 261
  },
  {
    "page": 68,

    "part": "068.尚硅谷_jQuery-jQuery对象和DOM对象使用上的区别",
    "duration": 195
  },
  {
    "page": 69,

    "part": "069.尚硅谷_jQuery-jQuery对象和DOM对象的相互转换",
    "duration": 120
  },
  {
    "page": 70,

    "part": "070.尚硅谷_jQuery-基础选择器",
    "duration": 858
  },
  {
    "page": 71,

    "part": "071.尚硅谷_jQuery-层级选择器",
    "duration": 400
  },
  {
    "page": 72,

    "part": "072.尚硅谷_jQuery-基本过滤选择器",
    "duration": 734
  },
  {
    "page": 73,

    "part": "073.尚硅谷_jQuery-内容过滤选择器",
    "duration": 384
  },
  {
    "page": 74,

    "part": "074.尚硅谷_jQuery-属性过滤选择器",
    "duration": 710
  },
  {
    "page": 75,

    "part": "075.尚硅谷_jQuery-表单过滤选择器",
    "duration": 1285
  },
  {
    "page": 76,

    "part": "076.尚硅谷_jQuery-元素的筛选",
    "duration": 1782
  },
  {
    "page": 77,

    "part": "077.尚硅谷_jQuery-html()、text()、val()方法",
    "duration": 1059
  },
  {
    "page": 78,

    "part": "078.尚硅谷_jQuery-attr() 和 prop() 方法",
    "duration": 592
  },
  {
    "page": 79,

    "part": "079.尚硅谷_jQuery-练习:全选、全不选、反选",
    "duration": 1001
  },
  {
    "page": 80,

    "part": "080.尚硅谷_jQuery-dom的增,删,改",
    "duration": 577
  },
  {
    "page": 81,

    "part": "081.尚硅谷_jQuery-练习:从左到右,从右到左",
    "duration": 366
  },
  {
    "page": 82,

    "part": "082.尚硅谷_jQuery-练习:动态添加和删除行记录",
    "duration": 1606
  },
  {
    "page": 83,

    "part": "083.尚硅谷_jQuery-css样式操作",
    "duration": 633
  },
  {
    "page": 84,

    "part": "084.尚硅谷_jQuery-动画操作",
    "duration": 769
  },
  {
    "page": 85,

    "part": "085.尚硅谷_jQuery-练习:品牌展示",
    "duration": 1320
  },
  {
    "page": 86,

    "part": "086.尚硅谷_jQuery-原生js和jQuery页面加载完成之后的区别",
    "duration": 646
  },
  {
    "page": 87,

    "part": "087.尚硅谷_jQuery-jQuery中常用的事件处理方法",
    "duration": 895
  },
  {
    "page": 88,

    "part": "088.尚硅谷_jQuery-事件的冒泡",
    "duration": 178
  },
  {
    "page": 89,

    "part": "089.尚硅谷_jQuery-事件对象",
    "duration": 404
  },
  {
    "page": 90,

    "part": "090.尚硅谷_jQuery-练习:图片跟随",
    "duration": 422
  },
  {
    "page": 91,

    "part": "091.尚硅谷_书城项目-第一阶段:表单验证的说明",
    "duration": 73
  },
  {
    "page": 92,

    "part": "092.尚硅谷_书城项目-第一阶段:表单验证的实现",
    "duration": 1284
  },
  {
    "page": 93,

    "part": "093.尚硅谷_xml-什么是XML以及它的作用",
    "duration": 261
  },
  {
    "page": 94,

    "part": "094.尚硅谷_xml-第一个xml示例文件",
    "duration": 401
  },
  {
    "page": 95,

    "part": "095.尚硅谷_xml-xml语法介绍",
    "duration": 785
  },
  {
    "page": 96,

    "part": "096.尚硅谷_xml-xml解析技术介绍",
    "duration": 339
  },
  {
    "page": 97,

    "part": "097.尚硅谷_xml-使用dom4j读取xml文件得到Document对象",
    "duration": 556
  },
  {
    "page": 98,

    "part": "098.尚硅谷_xml-使用dom4j解析xml",
    "duration": 618
  },
  {
    "page": 99,

    "part": "099.尚硅谷_Tomcat-JavaWeb概念",
    "duration": 205
  },
  {
    "page": 100,

    "part": "100.尚硅谷_Tomcat-Web资源的分类",
    "duration": 88
  },
  {
    "page": 101,

    "part": "101.尚硅谷_Tomcat-常见Web服务器",
    "duration": 130
  },
  {
    "page": 102,

    "part": "102.尚硅谷_Tomcat-Tomcat服务器和Servlet版本的对应关系",
    "duration": 148
  },
  {
    "page": 103,

    "part": "103.尚硅谷_Tomcat-Tomcat服务器的安装",
    "duration": 103
  },
  {
    "page": 104,

    "part": "104.尚硅谷_Tomcat-Tomcat目录的介绍",
    "duration": 247
  },
  {
    "page": 105,

    "part": "105.尚硅谷_Tomcat-如何启动Tomcat服务器",
    "duration": 200
  },
  {
    "page": 106,

    "part": "106.尚硅谷_Tomcat-常见Tomcat启动失败的原因",
    "duration": 266
  },
  {
    "page": 107,

    "part": "107.尚硅谷_Tomcat-JAVA_HOME配置失败的几种常见情况",
    "duration": 111
  },
  {
    "page": 108,

    "part": "108.尚硅谷_Tomcat-另一种启动Tomcat服务器的方式catalina run",
    "duration": 167
  },
  {
    "page": 109,

    "part": "109.尚硅谷_Tomcat-停止Tomcat服务器的几种方式",
    "duration": 136
  },
  {
    "page": 110,

    "part": "110.尚硅谷_Tomcat-修改Tomcat默认端口号",
    "duration": 321
  },
  {
    "page": 111,

    "part": "111.尚硅谷_Tomcat-第一种部署web工程的方式",
    "duration": 301
  },
  {
    "page": 112,

    "part": "112.尚硅谷_Tomcat-第二种部署web工程的方式",
    "duration": 334
  },
  {
    "page": 113,

    "part": "113.尚硅谷_Tomcat-手托html页面和在浏览器中输入地址访问的背后不同原因",
    "duration": 419
  },
  {
    "page": 114,

    "part": "114.尚硅谷_Tomcat-默认访问的工程和默认访问的资源",
    "duration": 259
  },
  {
    "page": 115,

    "part": "115.尚硅谷_Tomcat-IDEA整合Tomcat服务器",
    "duration": 215
  },
  {
    "page": 116,

    "part": "116.尚硅谷_Tomcat-如何创建动态的web工程",
    "duration": 228
  },
  {
    "page": 117,

    "part": "117.尚硅谷_Tomcat-动态web工程目录的介绍",
    "duration": 305
  },
  {
    "page": 118,

    "part": "118.尚硅谷_Tomcat-给Tomcat添加第三方jar包",
    "duration": 462
  },
  {
    "page": 119,

    "part": "119.尚硅谷_Tomcat-如何在IDEA中启动部署web模板",
    "duration": 795
  },
  {
    "page": 120,

    "part": "120.尚硅谷_Tomcat-Tomcat实例使用的其他细节说明",
    "duration": 394
  },
  {
    "page": 121,

    "part": "121.尚硅谷_Servlet-什么是Servlet",
    "duration": 142
  },
  {
    "page": 122,

    "part": "122.尚硅谷_Servlet-第一个Servlet程序",
    "duration": 637
  },
  {
    "page": 123,

    "part": "123.尚硅谷_Servlet-Servlet程序常见错误",
    "duration": 390
  },
  {
    "page": 124,

    "part": "124.尚硅谷_Servlet-url地址如何定位到Servlet程序去访问",
    "duration": 476
  },
  {
    "page": 125,

    "part": "125.尚硅谷_Servlet-Servlet生命周期方法",
    "duration": 255
  },
  {
    "page": 126,

    "part": "126.尚硅谷_Servlet-请求的分发处理",
    "duration": 639
  },
  {
    "page": 127,

    "part": "127.尚硅谷_Servlet-通过继承HttpServlet类实现Servlet程序",
    "duration": 331
  },
  {
    "page": 128,

    "part": "128.尚硅谷_Servlet-IDEA菜单生成Servlet程序",
    "duration": 298
  },
  {
    "page": 129,

    "part": "129.尚硅谷_Servlet-整个Servlet类的继承体系",
    "duration": 819
  },
  {
    "page": 130,

    "part": "130.尚硅谷_Servlet-ServletConfig类使用介绍",
    "duration": 419
  },
  {
    "page": 131,

    "part": "131.尚硅谷_Servlet-ServletConfig类的补充说明",
    "duration": 524
  },
  {
    "page": 132,

    "part": "132.尚硅谷_Servlet-ServletContext对象的介绍",
    "duration": 193
  },
  {
    "page": 133,

    "part": "133.尚硅谷_Servlet-ServletContext对象作用的演示",
    "duration": 1153
  },
  {
    "page": 134,

    "part": "134.尚硅谷_Servlet-ServletContext像map一样存取数据",
    "duration": 673
  },
  {
    "page": 135,

    "part": "135.尚硅谷_Servlet-什么是HTTP协议",
    "duration": 93
  },
  {
    "page": 136,

    "part": "136.尚硅谷_Servlet-GET请求HTTP协议内容介绍",
    "duration": 717
  },
  {
    "page": 137,

    "part": "137.尚硅谷_Servlet-POST请求HTTP协议内容介绍",
    "duration": 638
  },
  {
    "page": 138,

    "part": "138.尚硅谷_Servlet-常用请求头",
    "duration": 62
  },
  {
    "page": 139,

    "part": "139.尚硅谷_Servlet-哪些是GET请求,哪些是POST请求",
    "duration": 133
  },
  {
    "page": 140,

    "part": "140.尚硅谷_Servlet-响应的HTTP协议介绍",
    "duration": 395
  },
  {
    "page": 141,

    "part": "141.尚硅谷_Servlet-常见的响应状态码说明",
    "duration": 169
  },
  {
    "page": 142,

    "part": "142.尚硅谷_Servlet-MIME数据类型",
    "duration": 174
  },
  {
    "page": 143,

    "part": "143.尚硅谷_Servlet-谷歌浏览器和火狐浏览器如何查看HTTP协议",
    "duration": 353
  },
  {
    "page": 144,

    "part": "144.尚硅谷_Servlet-HttpServletRequest类的介绍",
    "duration": 108
  },
  {
    "page": 145,

    "part": "145.尚硅谷_Servlet-Request常用API的演示",
    "duration": 670
  },
  {
    "page": 146,

    "part": "146.尚硅谷_Servlet-获取请求的参数值---补充",
    "duration": 459
  },
  {
    "page": 147,

    "part": "147.尚硅谷_Servlet-获取请求的参数值",
    "duration": 171
  },
  {
    "page": 148,

    "part": "148.尚硅谷_Servlet-解决post请求中文乱码问题",
    "duration": 201
  },
  {
    "page": 149,

    "part": "149.尚硅谷_Servlet-请求转发",
    "duration": 1268
  },
  {
    "page": 150,

    "part": "150.尚硅谷_Servlet-base标签的作用",
    "duration": 956
  },
  {
    "page": 151,

    "part": "151.尚硅谷_Servlet-回顾javaweb中的路径",
    "duration": 75
  },
  {
    "page": 152,

    "part": "152.尚硅谷_Servlet-斜杠在web中的不同意义",
    "duration": 251
  },
  {
    "page": 153,

    "part": "153.尚硅谷_Servlet-HttpServletResponse类的介绍",
    "duration": 85
  },
  {
    "page": 154,

    "part": "154.尚硅谷_Servlet-两个响应流的介绍",
    "duration": 255
  },
  {
    "page": 155,

    "part": "155.尚硅谷_Servlet-给客户端回传字符串数据",
    "duration": 71
  },
  {
    "page": 156,

    "part": "156.尚硅谷_Servlet-解决响应的中文乱码",
    "duration": 292
  },
  {
    "page": 157,

    "part": "157.尚硅谷_Servlet-解决响应中文乱码方案二",
    "duration": 137
  },
  {
    "page": 158,

    "part": "158.尚硅谷_Servlet-请求重定向",
    "duration": 1005
  },
  {
    "page": 159,

    "part": "159.尚硅谷_Servlet-请求重定向第二种实现方案",
    "duration": 82
  },
  {
    "page": 160,

    "part": "160.尚硅谷_书城项目-第二阶段:用户登录和注册功能的介绍",
    "duration": 91
  },
  {
    "page": 161,

    "part": "161.尚硅谷_书城项目-JavaEE三层架构介绍",
    "duration": 579
  },
  {
    "page": 162,

    "part": "162.尚硅谷_书城项目-搭建书城项目环境",
    "duration": 319
  },
  {
    "page": 163,

    "part": "163.尚硅谷_书城项目-创建数据库和t_user用户表",
    "duration": 355
  },
  {
    "page": 164,

    "part": "164.尚硅谷_书城项目-创建数据库表对应的User类",
    "duration": 96
  },
  {
    "page": 165,

    "part": "165.尚硅谷_书城项目-JdbcUtils工具类的编写和测试",
    "duration": 838
  },
  {
    "page": 166,

    "part": "166.尚硅谷_书城项目-编写BaseDao",
    "duration": 685
  },
  {
    "page": 167,

    "part": "167.尚硅谷_书城项目-编写UserDao和测试",
    "duration": 768
  },
  {
    "page": 168,

    "part": "168.尚硅谷_书城项目-编写UserService和测试",
    "duration": 524
  },
  {
    "page": 169,

    "part": "169.尚硅谷_书城项目-实现用户注册的功能",
    "duration": 1349
  },
  {
    "page": 170,

    "part": "170.尚硅谷_书城项目-IDEA工具Debug的使用",
    "duration": 1341
  },
  {
    "page": 171,

    "part": "171.尚硅谷_书城项目-用户登录功能实现",
    "duration": 802
  },
  {
    "page": 172,

    "part": "172.尚硅谷_jsp-什么是jsp,以及它有什么作用",
    "duration": 519
  },
  {
    "page": 173,

    "part": "173.尚硅谷_jsp-jsp的小结",
    "duration": 215
  },
  {
    "page": 174,

    "part": "174.尚硅谷_jsp-jsp页面的本质",
    "duration": 532
  },
  {
    "page": 175,

    "part": "175.尚硅谷_jsp-jsp的page指令",
    "duration": 986
  },
  {
    "page": 176,

    "part": "176.尚硅谷_jsp-声明脚本",
    "duration": 444
  },
  {
    "page": 177,

    "part": "177.尚硅谷_jsp-表达式脚本",
    "duration": 468
  },
  {
    "page": 178,

    "part": "178.尚硅谷_jsp-代码脚本",
    "duration": 867
  },
  {
    "page": 179,

    "part": "179.尚硅谷_jsp-jsp中的三种注释",
    "duration": 247
  },
  {
    "page": 180,

    "part": "180.尚硅谷_jsp-jsp中的九大内置对象",
    "duration": 217
  },
  {
    "page": 181,

    "part": "181.尚硅谷_jsp-四个域对象的演示",
    "duration": 732
  },
  {
    "page": 182,

    "part": "182.尚硅谷_jsp-out和response输出的区别",
    "duration": 1197
  },
  {
    "page": 183,

    "part": "183.尚硅谷_jsp-常用标签 之 静态包含",
    "duration": 535
  },
  {
    "page": 184,

    "part": "184.尚硅谷_jsp-常用标签 之 动态包含",
    "duration": 662
  },
  {
    "page": 185,

    "part": "185.尚硅谷_jsp-常用标签 之 请求转发",
    "duration": 119
  },
  {
    "page": 186,

    "part": "186.尚硅谷_jsp-练习一:九九乘法口诀表",
    "duration": 459
  },
  {
    "page": 187,

    "part": "187.尚硅谷_jsp-练习二:遍历输出10个学生信息到表格中",
    "duration": 482
  },
  {
    "page": 188,

    "part": "188.尚硅谷_jsp-请求转发的使用说明",
    "duration": 618
  },
  {
    "page": 189,

    "part": "189.尚硅谷_jsp-什么是Listener监听器",
    "duration": 151
  },
  {
    "page": 190,

    "part": "190.尚硅谷_jsp-ServletContextListener监听器演示",
    "duration": 347
  },
  {
    "page": 191,

    "part": "191.尚硅谷_EL表达式-什么是EL表达式,以及它的作用",
    "duration": 394
  },
  {
    "page": 192,

    "part": "192.尚硅谷_EL表达式-EL表达式搜索四个域的顺序",
    "duration": 325
  },
  {
    "page": 193,

    "part": "193.尚硅谷_EL表达式-EL表达式输出复杂的Bean对象",
    "duration": 899
  },
  {
    "page": 194,

    "part": "194.尚硅谷_EL表达式-关系运算",
    "duration": 179
  },
  {
    "page": 195,

    "part": "195.尚硅谷_EL表达式-逻辑运算",
    "duration": 119
  },
  {
    "page": 196,

    "part": "196.尚硅谷_EL表达式-算术运算",
    "duration": 137
  },
  {
    "page": 197,

    "part": "197.尚硅谷_EL表达式-empty运算",
    "duration": 371
  },
  {
    "page": 198,

    "part": "198.尚硅谷_EL表达式-点运算和中括号运算",
    "duration": 485
  },
  {
    "page": 199,

    "part": "199.尚硅谷_EL表达式-11个EL隐含对象的介绍",
    "duration": 350
  },
  {
    "page": 200,

    "part": "200.尚硅谷_EL表达式-pageScope、requestScope、sessionScope、applicationScope的示例",
    "duration": 285
  },
  {
    "page": 201,

    "part": "201.尚硅谷_EL表达式-pageContext演示",
    "duration": 603
  },
  {
    "page": 202,

    "part": "202.尚硅谷_EL表达式-其他EL隐含对象的示例",
    "duration": 1029
  },
  {
    "page": 203,

    "part": "203.尚硅谷_JSTL标签库-JSTL标签库的介绍",
    "duration": 188
  },
  {
    "page": 204,

    "part": "204.尚硅谷_JSTL标签库-标签库的使用步骤",
    "duration": 205
  },
  {
    "page": 205,

    "part": "205.尚硅谷_JSTL标签库-set标签",
    "duration": 321
  },
  {
    "page": 206,

    "part": "206.尚硅谷_JSTL标签库-if标签",
    "duration": 158
  },
  {
    "page": 207,

    "part": "207.尚硅谷_JSTL标签库-choose、when、otherwise标签",
    "duration": 553
  },
  {
    "page": 208,

    "part": "208.尚硅谷_JSTL标签库-使用forEach遍历1到10的情况",
    "duration": 326
  },
  {
    "page": 209,

    "part": "209.尚硅谷_JSTL标签库-使用forEach遍历Object数组",
    "duration": 214
  },
  {
    "page": 210,

    "part": "210.尚硅谷_JSTL标签库-使用forEach遍历Map集合",
    "duration": 271
  },
  {
    "page": 211,

    "part": "211.尚硅谷_JSTL标签库-使用forEach遍历List集合",
    "duration": 490
  },
  {
    "page": 212,

    "part": "212.尚硅谷_JSTL标签库-forEach标签所有属性组合使用介绍",
    "duration": 881
  },
  {
    "page": 213,

    "part": "213.尚硅谷_文件上传-文件上传的介绍",
    "duration": 488
  },
  {
    "page": 214,

    "part": "214.尚硅谷_文件上传-上传的http协议内容介绍",
    "duration": 820
  },
  {
    "page": 215,

    "part": "215.尚硅谷_文件上传-上传合用到的类和方法的介绍",
    "duration": 376
  },
  {
    "page": 216,

    "part": "216.尚硅谷_文件上传-使用fileupload解析上传的数据",
    "duration": 452
  },
  {
    "page": 217,

    "part": "217.尚硅谷_文件下载-文件下载的实现",
    "duration": 907
  },
  {
    "page": 218,

    "part": "218.尚硅谷_文件下载-使用URLEncoder解决谷歌和IE浏览器中文下载名乱码问题",
    "duration": 285
  },
  {
    "page": 219,

    "part": "219.尚硅谷_文件下载-Base64编解码操作",
    "duration": 350
  },
  {
    "page": 220,

    "part": "220.尚硅谷_文件下载-使用Base64编解码解决火狐浏览器附件中文乱码问题",
    "duration": 202
  },
  {
    "page": 221,

    "part": "221.尚硅谷_文件下载-使用User-Agent请求头判断,动态切换不同的方案解决所有浏览器附件中文乱码问题",
    "duration": 248
  },
  {
    "page": 222,

    "part": "222.尚硅谷_书城项目-第三阶段:修改所有html页面为jsp页面",
    "duration": 809
  },
  {
    "page": 223,

    "part": "223.尚硅谷_书城项目-第三阶段:抽取所有jsp页面中公共内容",
    "duration": 797
  },
  {
    "page": 224,

    "part": "224.尚硅谷_书城项目-动态的base标签值",
    "duration": 310
  },
  {
    "page": 225,

    "part": "225.尚硅谷_书城项目-表单提交失败的错误回显",
    "duration": 802
  },
  {
    "page": 226,

    "part": "226.尚硅谷_书城项目-代码优化:合并LoginServlet和RegistServlet程序为UserServlet程序",
    "duration": 863
  },
  {
    "page": 227,

    "part": "227.尚硅谷_书城项目-代码优化二:使用反射优化大量else if代码",
    "duration": 853
  },
  {
    "page": 228,

    "part": "228.尚硅谷_书城项目-代码优化三:抽取BaseServlet程序",
    "duration": 347
  },
  {
    "page": 229,

    "part": "229.尚硅谷_书城项目-BeanUtils工具类的使用",
    "duration": 1505
  },
  {
    "page": 230,

    "part": "230.尚硅谷_书城项目-书城项目第四阶段,使用EL表达式实现表单错误回显",
    "duration": 243
  },
  {
    "page": 231,

    "part": "231.尚硅谷_书城项目-第五阶段:内容介绍",
    "duration": 117
  },
  {
    "page": 232,

    "part": "232.尚硅谷_书城项目-MVC概念的介绍",
    "duration": 215
  },
  {
    "page": 233,

    "part": "233.尚硅谷_书城项目-创建图书模块的数据库表",
    "duration": 298
  },
  {
    "page": 234,

    "part": "234.尚硅谷_书城项目-编写图书模块的JavaBean类Book",
    "duration": 230
  },
  {
    "page": 235,

    "part": "235.尚硅谷_书城项目-编写图书模块的Dao和测试",
    "duration": 722
  },
  {
    "page": 236,

    "part": "236.尚硅谷_书城项目-编写图书模块的Service和测试",
    "duration": 441
  },
  {
    "page": 237,

    "part": "237.尚硅谷_书城项目-图书列表功能的实现",
    "duration": 1049
  },
  {
    "page": 238,

    "part": "238.尚硅谷_书城项目-前后台的简单介绍",
    "duration": 266
  },
  {
    "page": 239,

    "part": "239.尚硅谷_书城项目-添加图书功能实现",
    "duration": 876
  },
  {
    "page": 240,

    "part": "240.尚硅谷_书城项目-删除图书功能的实现",
    "duration": 1153
  },
  {
    "page": 241,

    "part": "241.尚硅谷_书城项目-修改图书第一步,回显修改的信息",
    "duration": 850
  },
  {
    "page": 242,

    "part": "242.尚硅谷_书城项目-修改图书第二步,提交给服务器保存修改",
    "duration": 1163
  },
  {
    "page": 243,

    "part": "243.尚硅谷_书城项目-第五阶段:图书分页的分析",
    "duration": 1514
  },
  {
    "page": 244,

    "part": "244.尚硅谷_书城项目-分页模型Page对象的创建",
    "duration": 270
  },
  {
    "page": 245,

    "part": "245.尚硅谷_书城项目-分页初步实现",
    "duration": 1374
  },
  {
    "page": 246,

    "part": "246.尚硅谷_书城项目-首页、上一页、下一页、末页的实现",
    "duration": 407
  },
  {
    "page": 247,

    "part": "247.尚硅谷_书城项目-跳到指定页码功能的实现",
    "duration": 334
  },
  {
    "page": 248,

    "part": "248.尚硅谷_书城项目-数据有效边境检查",
    "duration": 442
  },
  {
    "page": 249,

    "part": "249.尚硅谷_书城项目-分页条页码的输出",
    "duration": 1233
  },
  {
    "page": 250,

    "part": "250.尚硅谷_书城项目-修改分页对原来,添加、删除、修改的影响",
    "duration": 664
  },
  {
    "page": 251,

    "part": "251.尚硅谷_书城项目-前台分页的初步实现",
    "duration": 1263
  },
  {
    "page": 252,

    "part": "252.尚硅谷_书城项目-分页条的抽取",
    "duration": 500
  },
  {
    "page": 253,

    "part": "253.尚硅谷_书城项目-价格区间搜索并分页的分析",
    "duration": 521
  },
  {
    "page": 254,

    "part": "254.尚硅谷_书城项目-价格区间搜索并分页功能的实现",
    "duration": 845
  },
  {
    "page": 255,

    "part": "255.尚硅谷_书城项目-搜索价格区间的回显",
    "duration": 86
  },
  {
    "page": 256,

    "part": "256.尚硅谷_书城项目-解决分页条中不带价格区间的bug",
    "duration": 326
  },
  {
    "page": 257,

    "part": "257.尚硅谷_Cookie-什么是Cookie",
    "duration": 125
  },
  {
    "page": 258,

    "part": "258.尚硅谷_Cookie-Cookie的创建",
    "duration": 1010
  },
  {
    "page": 259,

    "part": "259.尚硅谷_Cookie-Cookie的获取",
    "duration": 898
  },
  {
    "page": 260,

    "part": "260.尚硅谷_Cookie-Cookie值的修改",
    "duration": 527
  },
  {
    "page": 261,

    "part": "261.尚硅谷_Cookie-谷歌和火狐浏览器如何查看Cookie",
    "duration": 216
  },
  {
    "page": 262,

    "part": "262.尚硅谷_Cookie-Cookie的存活设置",
    "duration": 841
  },
  {
    "page": 263,

    "part": "263.尚硅谷_Cookie-Cookie的path属性",
    "duration": 474
  },
  {
    "page": 264,

    "part": "264.尚硅谷_Cookie-Cookie练习之免用户名登录",
    "duration": 975
  },
  {
    "page": 265,

    "part": "265.尚硅谷_Session-什么是Session",
    "duration": 133
  },
  {
    "page": 266,

    "part": "266.尚硅谷_Session-Session的创建和获取",
    "duration": 626
  },
  {
    "page": 267,

    "part": "267.尚硅谷_Session-Session域中数据的存取",
    "duration": 260
  },
  {
    "page": 268,

    "part": "268.尚硅谷_Session-Session超时的控制",
    "duration": 1352
  },
  {
    "page": 269,

    "part": "269.尚硅谷_Session-浏览器和Session之间关联的技术内幕",
    "duration": 1074
  },
  {
    "page": 270,

    "part": "270.尚硅谷_书城项目-显示登录的用户信息",
    "duration": 589
  },
  {
    "page": 271,

    "part": "271.尚硅谷_书城项目-注销登录",
    "duration": 204
  },
  {
    "page": 272,

    "part": "272.尚硅谷_书城项目-表单重复提交的三种常见情况",
    "duration": 797
  },
  {
    "page": 273,

    "part": "273.尚硅谷_书城项目-验证码底层原理",
    "duration": 380
  },
  {
    "page": 274,

    "part": "274.尚硅谷_书城项目-谷歌验证码的使用",
    "duration": 718
  },
  {
    "page": 275,

    "part": "275.尚硅谷_书城项目-把谷歌验证码加入到书城中使用",
    "duration": 369
  },
  {
    "page": 276,

    "part": "276.尚硅谷_书城项目-验证码的切换",
    "duration": 669
  },
  {
    "page": 277,

    "part": "277.尚硅谷_书城项目-购物车模块的分析",
    "duration": 846
  },
  {
    "page": 278,

    "part": "278.尚硅谷_书城项目-购物车模型的创建",
    "duration": 189
  },
  {
    "page": 279,

    "part": "279.尚硅谷_书城项目-购物车功能方法的实现和测试",
    "duration": 1266
  },
  {
    "page": 280,

    "part": "280.尚硅谷_书城项目-添加商品到购物车功能的实现",
    "duration": 2004
  },
  {
    "page": 281,

    "part": "281.尚硅谷_书城项目-购物车的展示",
    "duration": 613
  },
  {
    "page": 282,

    "part": "282.尚硅谷_书城项目-删除购物车中的商品项",
    "duration": 572
  },
  {
    "page": 283,

    "part": "283.尚硅谷_书城项目-清空购物车的实现",
    "duration": 299
  },
  {
    "page": 284,

    "part": "284.尚硅谷_书城项目-修改购物车商品数量",
    "duration": 981
  },
  {
    "page": 285,

    "part": "285.尚硅谷_书城项目-首页购物车数据展示",
    "duration": 363
  },
  {
    "page": 286,

    "part": "286.尚硅谷_书城项目-订单模块的分析",
    "duration": 1145
  },
  {
    "page": 287,

    "part": "287.尚硅谷_书城项目-创建订单模型的数据库表",
    "duration": 290
  },
  {
    "page": 288,

    "part": "288.尚硅谷_书城项目-编写订单模块的两个数据模型Order和OrderItem",
    "duration": 224
  },
  {
    "page": 289,

    "part": "289.尚硅谷_书城项目-编写订单模块的Dao和测试",
    "duration": 617
  },
  {
    "page": 290,

    "part": "290.尚硅谷_书城项目-编写订单模块的Service和测试",
    "duration": 620
  },
  {
    "page": 291,

    "part": "291.尚硅谷_书城项目-结账功能实现,生成订单",
    "duration": 610
  },
  {
    "page": 292,

    "part": "292.尚硅谷_书城项目-解决生成订单的bug",
    "duration": 331
  },
  {
    "page": 293,

    "part": "293.尚硅谷_Filter-什么是Filter过滤器",
    "duration": 126
  },
  {
    "page": 294,

    "part": "294.尚硅谷_Filter-Filter过滤器的基本使用示例",
    "duration": 1342
  },
  {
    "page": 295,

    "part": "295.尚硅谷_Filter-完整的用户登录和权限检查",
    "duration": 661
  },
  {
    "page": 296,

    "part": "296.尚硅谷_Filter-Filter的生命周期",
    "duration": 276
  },
  {
    "page": 297,

    "part": "297.尚硅谷_Filter-FilterConfig类介绍",
    "duration": 338
  },
  {
    "page": 298,

    "part": "298.尚硅谷_Filter-FilterChain多个过滤器执行的细节",
    "duration": 1300
  },
  {
    "page": 299,

    "part": "299.尚硅谷_Filter-Filter拦截路径的三种配置方式",
    "duration": 376
  },
  {
    "page": 300,

    "part": "300.尚硅谷_书城项目-使用Filter过滤器实现后台的权限管理",
    "duration": 427
  },
  {
    "page": 301,

    "part": "301.尚硅谷_书城项目-ThreadLocal使用介绍",
    "duration": 1486
  },
  {
    "page": 302,

    "part": "302.尚硅谷_书城项目-使用ThreadLocal确保所有操作都使用同一个Connection来实现事务管理",
    "duration": 1831
  },
  {
    "page": 303,

    "part": "303.尚硅谷_书城项目-使用Filter统一给所有Service方法都加上try-catch来管理事务",
    "duration": 1088
  },
  {
    "page": 304,

    "part": "304.尚硅谷_书城项目-使用Tomcat统一管理异常,展示友好的错误页面",
    "duration": 651
  },
  {
    "page": 305,

    "part": "305.尚硅谷_JSON-什么是JSON",
    "duration": 164
  },
  {
    "page": 306,

    "part": "306.尚硅谷_JSON-JSON的定义和访问",
    "duration": 1057
  },
  {
    "page": 307,

    "part": "307.尚硅谷_JSON-JSON在JavaScript中两种常用的转换方法",
    "duration": 385
  },
  {
    "page": 308,

    "part": "308.尚硅谷_JSON-JavaBean和json的相互转换",
    "duration": 552
  },
  {
    "page": 309,

    "part": "309.尚硅谷_JSON-List集合和json的相互转换",
    "duration": 465
  },
  {
    "page": 310,

    "part": "310.尚硅谷_JSON-Map集合和json的相互转换",
    "duration": 420
  },
  {
    "page": 311,

    "part": "311.尚硅谷_AJAX-什么是AJAX请求",
    "duration": 74
  },
  {
    "page": 312,

    "part": "312.尚硅谷_AJAX-原生JavaScript的AJAX请求示例",
    "duration": 1053
  },
  {
    "page": 313,

    "part": "313.尚硅谷_AJAX-AJAX请求的特点说明",
    "duration": 521
  },
  {
    "page": 314,

    "part": "314.尚硅谷_AJAX-jQuery的ajax方法",
    "duration": 896
  },
  {
    "page": 315,

    "part": "315.尚硅谷_AJAX-jQuery的get和post方法",
    "duration": 293
  },
  {
    "page": 316,

    "part": "316.尚硅谷_AJAX-jQuery的getJSON方法",
    "duration": 173
  },
  {
    "page": 317,

    "part": "317.尚硅谷_AJAX-jQuery的serialize方法",
    "duration": 447
  },
  {
    "page": 318,

    "part": "318.尚硅谷_书城项目-使用AJAX请求验证用户名是否可用",
    "duration": 780
  },
  {
    "page": 319,

    "part": "319.尚硅谷_书城项目-使用AJAX请求修改添加商品到购物车的实现",
    "duration": 890
  },
  {
    "page": 320,

    "part": "320.尚硅谷_i18n-什么是i18n国际化",
    "duration": 156
  },
  {
    "page": 321,

    "part": "321.尚硅谷_i18n-i18n国际化三要素介绍",
    "duration": 461
  },
  {
    "page": 322,

    "part": "322.尚硅谷_i18n-i18n国际化基础示例",
    "duration": 581
  },
  {
    "page": 323,

    "part": "323.尚硅谷_i18n-通过请求头实现国际化",
    "duration": 612
  },
  {
    "page": 324,

    "part": "324.尚硅谷_i18n-通过语言类型选择实现国际化",
    "duration": 242
  },
  {
    "page": 325,

    "part": "325.尚硅谷_i18n-使用JSTL标签库fmt实现国际化",
    "duration": 486
  }
];

// 页面加载完成后
$(() => {
    // 为submit按钮绑定点击事件
    $('#submit').click(() => {
        /**
         * 验证开始和结束集数是否满足要求,必须是整数,且长度为1位到4位
         *  1. 获取输入框里的内容
         *  2. 创建正则表达式对象
         *  3. 使用 test() 验证
         *  4. 提示用户结果
         */
        if (!check(0, '#start', '开始集数输入有误')) {
            return false;
        }
        if (!check(0, '#end', '结束集数输入有误')) {
            return false;
        }

        /**
         * 验证平均播放倍速是否满足要求,必须是数字(含小数),且总长度为2位(含小数部分)
         *  1. 获取输入框里的内容
         *  2. 创建正则表达式对象
         *  3. 使用 test() 验证
         *  4. 提示用户结果
         */
        if (!check(1, '#speed', '播放倍速输入有误')) {
            return false;
        }

        // 恢复错误提示信息为空
        $('.errMsg').text('');
    });
});

function check(type, node, errMsg) {
    switch(type) {
        case 0:
            return checkReg(node, errMsg, /^\d{1,4}$/);
            break;
        case 1:
            return checkReg(node, errMsg, /^[0-9]+([.]{1}[0-9])?$/);
            break;
        // 没有default
    }
}

function checkReg(node, errMsg, reg) {
    const value = $(node).val();     
    if (!reg.test(value)) {
        $('.errMsg').text(errMsg);
        return false;
    }
    return true;
}
<html>
    <body>
        <div class="flex-center container">
            <input id="start" class="input" placeholder="请输入开始集数" value=""/>
            <input id="end" class="input" placeholder="请输入结束集数" />
            <input id="speed" class="input" placeholder="请输入平均播放倍速" value=""/>                        
            <div class="flex-center_column">
                <div class="errMsg"></div>
                <button id="submit" class="btn">确认(Enter)</button>
            </div>
            <div class="info-container">
                <div id="duration" class="info"></div>
                <div id="info" class="info"></div>
                <div id="speedDuration" class="info"></div>        
            </div>
        </div>
    </body>
</html>
.flex-center, .flex-center_column {
    display: flex;
    align-items: center;
    justify-content: center;   
}
.flex-center_column {
    flex-direction: column;
}

.container {    
    flex-direction: column; 
    padding: 0 40px;
}
    .input {        
        margin: 10px 0;
	    width:100%;
	    height:40px;
	    border:1px solid #dbdbdb;
	    outline:none;
	    font-size:20px;
	    text-indent:10px;
    }
    .info-container {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        border-radius: 20px;
        overflow: hidden;
        box-shadow:4px 4px 9px #333333;
        background: #fff;
    }
        .info {
            padding: 0 20px; 
            line-height: 50px;          
            font-size: 18px;
            color: #333;
        }
    .btn {
        margin: 20px 0;
        padding: 20px 30vw;
        border-radius: 10px;        
        text-align: center;
        box-shadow:4px 4px 9px #333333;
        font-size: 18px;
        color: white;
        background: #2BAEFE;
    }
    button {
        border: 0;
    }
    .errMsg {
        font-size: 18px;
        color: tomato;
    }

本项目引用的自定义外部资源