前段些天发现每过一段时间电脑的时间总会出现一些误差，之前总是使用自带的授时服务器（ntp）进行更新，但是经常遇到更新失败的问题，后来听liangke说他都是使用国家授时中心的ntp服务，由于是国内网络连接比较好，很快就可以同步完成。就决定也使用国内的ntp服务。那天，想到自己手上一直荒废的域名 t.hm ，似乎还比较合适，就解析了过去。你还别说，效果还不错呢。后来又做了个显示时间的页面 https://www.t.hm其中使用了JQuery的AJAX和定时任务两非常实用的功能，就记在这里，说不定还用的上的。这里主要用了两个插件：dayjs 和 jquery。哦，还有一个很奇葩的BUG，Safari浏览器不支持解析yyyy-mm-dd格式的时间，所以需要修改时间格式（我这里用的是/代替的-）。
jQuery Ajax 操作函数jQuery 库拥有完整的 Ajax 兼容套件。其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据。函数描述jQuery.ajax()执行异步 HTTP (Ajax) 请求。.ajaxComplete()当 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。.ajaxError()当 Ajax 请求完成且出现错误时注册要调用的处理程序。这是一个 Ajax 事件。.ajaxSend()在 Ajax 请求发送之前显示一条消息。jQuery.ajaxSetup()设置将来的 Ajax 请求的默认值。.ajaxStart()当首个 Ajax 请求完成开始时注册要调用的处理程序。这是一个 Ajax 事件。.ajaxStop()当所有 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。.ajaxSuccess()当 Ajax 请求成功完成时显示一条消息。jQuery.get()使用 HTTP GET 请求从服务器加载数据。jQuery.getJSON()使用 HTTP GET 请求从服务器加载 JSON 编码数据。jQuery.getScript()使用 HTTP GET 请求从服务器加载 JavaScript 文件，然后执行该文件。.load()从服务器加载数据，然后把返回到 HTML 放入匹配元素。jQuery.param()创建数组或对象的序列化表示，适合在 URL 查询字符串或 Ajax 请求中使用。jQuery.post()使用 HTTP POST 请求从服务器加载数据。.serialize()将表单内容序列化为字符串。.serializeArray()序列化表单元素，返回 JSON 数据结构数据。$.ajax这个函数参数很多，而且都是可选，是底层函数，一般用不着。一般用$.get和$.post就可以满足需要了。$.get 二个参数，第一个是地址，第二个是回调函数。$("button").click(function(){ $.get("demo_test.asp", function(data,status){ alert("Data: " + data + "\nStatus: " + status); }); });$.post 三个参数，第一个地址，第二个提交数据，第三个回调函数。status是回调状态。$("button").click(function(){ $.post("demo_test_post.asp", { name:"Donald Duck", city:"Duckburg" }, function(data,status){ alert("Data: " + data + "\nStatus: " + status); }); });
选择器实例选取*$("*")所有元素\#id$("#lastname")id="lastname" 的元素.class$(".intro")所有 class="intro" 的元素element$("p")所有 元素.class.class$(".intro.demo")所有 class="intro" 且 class="demo" 的元素:first$("p:first")第一个 元素:last$("p:last")最后一个 元素:even$("tr:even")所有偶数 元素:odd$("tr:odd")所有奇数 元素:eq(index)$("ul li:eq(3)")列表中的第四个元素（index 从 0 开始）:gt(no)$("ul li:gt(3)")列出 index 大于 3 的元素:lt(no)$("ul li:lt(3)")列出 index 小于 3 的元素:not(selector)$("input:not(:empty)")所有不为空的 input 元素:header$(":header")所有标题元素 - :animated 所有动画元素:contains(text)$(":contains('W3School')")包含指定字符串的所有元素:empty$(":empty")无子（元素）节点的所有元素:hidden$("p:hidden")所有隐藏的 元素:visible$("table:visible")所有可见的表格s1,s2,s3$("th,td,.intro")所有带有匹配选择的元素[attribute]$("[href]")所有带有 href 属性的元素[attribute=value]$("[href='#']")所有 href 属性的值等于 "#" 的元素[attribute!=value]$("[href!='#']")所有 href 属性的值不等于 "#" 的元素[attribute$=value]$("[href$='.jpg']")所有 href 属性的值包含以 ".jpg" 结尾的元素:input$(":input")所有 元素:text$(":text")所有 type="text" 的 元素:password$(":password")所有 type="password" 的 元素:radio$(":radio")所有 type="radio" 的 元素:checkbox$(":checkbox")所有 type="checkbox" 的 元素:submit$(":submit")所有 type="submit" 的 元素:reset$(":reset")所有 type="reset" 的 元素:button$(":button")所有 type="button" 的 元素:image$(":image")所有 type="image" 的 元素:file$(":file")所有 type="file" 的 元素:enabled$(":enabled")所有激活的 input 元素:disabled$(":disabled")所有禁用的 input 元素:selected$(":selected")所有被选取的 input 元素:checked$(":checked")所有被选中的 input 元素
jQuery 遍历函数包括了用于筛选、查找和串联元素的方法。函数描述.add()将元素添加到匹配元素的集合中。.andSelf()把堆栈中之前的元素集添加到当前集合中。.children()获得匹配元素集合中每个元素的所有子元素。.closest()从元素本身开始，逐级向上级元素匹配，并返回最先匹配的祖先元素。.contents()获得匹配元素集合中每个元素的子元素，包括文本和注释节点。.each()对 jQuery 对象进行迭代，为每个匹配元素执行函数。.end()结束当前链中最近的一次筛选操作，并将匹配元素集合返回到前一次的状态。.eq()将匹配元素集合缩减为位于指定索引的新元素。.filter()将匹配元素集合缩减为匹配选择器或匹配函数返回值的新元素。.find()获得当前匹配元素集合中每个元素的后代，由选择器进行筛选。.first()将匹配元素集合缩减为集合中的第一个元素。.has()将匹配元素集合缩减为包含特定元素的后代的集合。.is()根据选择器检查当前匹配元素集合，如果存在至少一个匹配元素，则返回 true。.last()将匹配元素集合缩减为集合中的最后一个元素。.map()把当前匹配集合中的每个元素传递给函数，产生包含返回值的新 jQuery 对象。.next()获得匹配元素集合中每个元素紧邻的同辈元素。.nextAll()获得匹配元素集合中每个元素之后的所有同辈元素，由选择器进行筛选（可选）。.nextUntil()获得每个元素之后所有的同辈元素，直到遇到匹配选择器的元素为止。.not()从匹配元素集合中删除元素。.offsetParent()获得用于定位的第一个父元素。.parent()获得当前匹配元素集合中每个元素的父元素，由选择器筛选（可选）。.parents()获得当前匹配元素集合中每个元素的祖先元素，由选择器筛选（可选）。.parentsUntil()获得当前匹配元素集合中每个元素的祖先元素，直到遇到匹配选择器的元素为止。.prev()获得匹配元素集合中每个元素紧邻的前一个同辈元素，由选择器筛选（可选）。.prevAll()获得匹配元素集合中每个元素之前的所有同辈元素，由选择器进行筛选（可选）。.prevUntil()获得每个元素之前所有的同辈元素，直到遇到匹配选择器的元素为止。.siblings()获得匹配元素集合中所有元素的同辈元素，由选择器筛选（可选）。.slice()将匹配元素集合缩减为指定范围的子集。