博客园 - JKisJK
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=34510
2021-08-04T14:54:03Z
JKisJK
https://www.cnblogs.com/jkisjk/
feed.cnblogs.com
https://www.cnblogs.com/jkisjk/p/bahuanghou.html
八皇后问题的Javascript实现 - JKisJK
八皇后问题的Javascript实现。直接上代码。 /* 八皇后问题: 建模: A 皇后横直不兼容:故每一排每一列最多只能有一个皇后,故每组答案可以简化为一个数组,如:[0, 4, 7, 5, 2, 6, 1, 3] B 判断条件可以简化为是否存在斜吃就行。 C 用递归实现 */ function
2021-08-04T12:42:00Z
2021-08-04T12:42:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】八皇后问题的Javascript实现。直接上代码。 /* 八皇后问题: 建模: A 皇后横直不兼容:故每一排每一列最多只能有一个皇后,故每组答案可以简化为一个数组,如:[0, 4, 7, 5, 2, 6, 1, 3] B 判断条件可以简化为是否存在斜吃就行。 C 用递归实现 */ function <a href="https://www.cnblogs.com/jkisjk/p/bahuanghou.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/11366243.html
浏览器控制台里的$、$$是咋回事 - JKisJK
程Hao同学提到:浏览器的控制台里,可以直接使用$、$$方法,可是这些方法,却不能被页面里的JS使用。 赵WenBo同学给出解答: https://developers.google.com/web/tools/chrome-devtools/console/utilities https://de
2019-08-16T12:42:00Z
2019-08-16T12:42:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】程Hao同学提到:浏览器的控制台里,可以直接使用$、$$方法,可是这些方法,却不能被页面里的JS使用。 赵WenBo同学给出解答: https://developers.google.com/web/tools/chrome-devtools/console/utilities https://de <a href="https://www.cnblogs.com/jkisjk/p/11366243.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/5477145.html
求一个红包算法 - JKisJK
m个硬币,n个红包,红包里的硬币数不可以小于b,也不可以大于t,数目是随机的。 mnt均为自然数,且 n*b<=m<=n*t。 求红包算法 function getRedPackets(m,n,b,t){ var ret = new Array(n); /*todo*/ return ret; }
2016-05-10T03:19:00Z
2016-05-10T03:19:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】m个硬币,n个红包,红包里的硬币数不可以小于b,也不可以大于t,数目是随机的。 mnt均为自然数,且 n*b<=m<=n*t。 求红包算法 function getRedPackets(m,n,b,t){ var ret = new Array(n); /*todo*/ return ret; } <a href="https://www.cnblogs.com/jkisjk/p/5477145.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/debug_thinkjs_with_webstorm.html
ThinkJS 项目用 WebStorm 来设置断点与调试 - JKisJK
1. 前置条件。已按ThinkJS 2.0 文档 之 《创建项目》 建好项目。 说明a: 本示例创建项目名为wagang,使用es6配置: thinkjs new wagang --es6 说明b: 最后两步(启动项目、访问项目)后,控制台输出如下。 2. 用WebStorm打开项目,修改...
2015-11-17T13:37:00Z
2015-11-17T13:37:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】1. 前置条件。已按ThinkJS 2.0 文档 之 《创建项目》 建好项目。 说明a: 本示例创建项目名为wagang,使用es6配置: thinkjs new wagang --es6 说明b: 最后两步(启动项目、访问项目)后,控制台输出如下。 2. 用WebStorm打开项目,修改... <a href="https://www.cnblogs.com/jkisjk/p/debug_thinkjs_with_webstorm.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/pagebar2015.html
分页组件 - JKisJK
上代码分页--JK分页条。总页数:(可以修改,以模拟总页数不同时的分页结果)看效果分页--JK分页条。总页数:(可以修改,以模拟总页数不同时的分页结果)
2015-09-17T05:55:00Z
2015-09-17T05:55:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】上代码分页--JK分页条。总页数:(可以修改,以模拟总页数不同时的分页结果)看效果分页--JK分页条。总页数:(可以修改,以模拟总页数不同时的分页结果) <a href="https://www.cnblogs.com/jkisjk/p/pagebar2015.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/4158531.html
北京地铁调价后的每月地铁费用如何算 - JKisJK
2014-12-28,北京地铁大调价。可以通过这个地址来查单程票价:http://piaojia.bmncc.com.cn/公告文如下: 北京市公共交通价格新政 于2014年12月28日起实施 引京发改[2014]2526号 地铁票价: 6公里(含)内3元;6公里至12公里(含)4元;12公里至22...
2014-12-11T13:21:00Z
2014-12-11T13:21:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】2014-12-28,北京地铁大调价。可以通过这个地址来查单程票价:http://piaojia.bmncc.com.cn/公告文如下: 北京市公共交通价格新政 于2014年12月28日起实施 引京发改[2014]2526号 地铁票价: 6公里(含)内3元;6公里至12公里(含)4元;12公里至22... <a href="https://www.cnblogs.com/jkisjk/p/4158531.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/p/3614427.html
“忠于原文”的前端转码问题 - JKisJK
用户输入的文本,有可能在很多地方出现,在出现时需要作转码,一方面是出于安全考虑(xss等),另一方面也是需要“忠实”的显示用户的合法输入。看下下面的各个?号,需要什么转码方式: 模板页面--JK@奇舞团 用户输入的值是: &lt;input onclick="alert('hello')">\&amp;amp; 请将本html文件中的代码中的?改成对应的编码后的文本,使之在输出时忠实的显示成用户输入的值。 注:以下代码里的部分使用方法应在现实中避免。 1. div里显示用户输入的内容:? ...
2014-03-20T10:58:00Z
2014-03-20T10:58:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】用户输入的文本,有可能在很多地方出现,在出现时需要作转码,一方面是出于安全考虑(xss等),另一方面也是需要“忠实”的显示用户的合法输入。看下下面的各个?号,需要什么转码方式: 模板页面--JK@奇舞团 用户输入的值是: &lt;input onclick="alert('hello')">\&amp;amp; 请将本html文件中的代码中的?改成对应的编码后的文本,使之在输出时忠实的显示成用户输入的值。 注:以下代码里的部分使用方法应在现实中避免。 1. div里显示用户输入的内容:? ... <a href="https://www.cnblogs.com/jkisjk/p/3614427.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2013/05/30/Firefox21_Firefox20.html
Firefox20 到 Firefox21 的一个小改变 - JKisJK
<div style="width:500px;position:relative;border:1px solid black;" onclick="alert([this.scrollHeight,this.offsetHeight]);"> <div style="float:left;width:200px;height:200px;border:3px"> click me </div> </div>Firefox20-: 0,2Firefox21+: 200,2其它浏览器:2
2013-05-30T13:56:00Z
2013-05-30T13:56:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】<div style="width:500px;position:relative;border:1px solid black;" onclick="alert([this.scrollHeight,this.offsetHeight]);"> <div style="float:left;width:200px;height:200px;border:3px"> click me </div> </div>Firefox20-: 0,2Firefox21+: 200,2其它浏览器:2 <a href="https://www.cnblogs.com/jkisjk/archive/2013/05/30/Firefox21_Firefox20.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2013/05/30/change_document_domain.html
修改document.domain的注意事项 - JKisJK
有时候,需要修改document.domain。 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B.htm"></iframe>,两个页面的js如何进行交互? 实现跨域交互的方式有很多,其中这种跨子域的交互,最简单方式就是通过设置document.domain:只需要在A.htm与B.htm里都加上这一句document.domain = 'xxx.com',两个页面就有了互信的基础,而能无碍的交互。 示例:http://www.wagang.net
2013-05-30T12:50:00Z
2013-05-30T12:50:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】有时候,需要修改document.domain。 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B.htm"></iframe>,两个页面的js如何进行交互? 实现跨域交互的方式有很多,其中这种跨子域的交互,最简单方式就是通过设置document.domain:只需要在A.htm与B.htm里都加上这一句document.domain = 'xxx.com',两个页面就有了互信的基础,而能无碍的交互。 示例:http://www.wagang.net <a href="https://www.cnblogs.com/jkisjk/archive/2013/05/30/change_document_domain.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2013/01/07/2848687.html
functionalize--实例方法变成静态函数 - JKisJK
QW.StringH.methodize可以把静态函数变成实例方法。与此相反,也应该有一个functionalize,用来把实例或原型方法变成静态函数。对应的简单实现如下: function functionalize(fun){ return function(){ return fun.call.apply(fun,arguments); } } var substr = functionalize(''.substr); alert(substr('hello',1,2));
2013-01-07T01:57:00Z
2013-01-07T01:57:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】QW.StringH.methodize可以把静态函数变成实例方法。与此相反,也应该有一个functionalize,用来把实例或原型方法变成静态函数。对应的简单实现如下: function functionalize(fun){ return function(){ return fun.call.apply(fun,arguments); } } var substr = functionalize(''.substr); alert(substr('hello',1,2)); <a href="https://www.cnblogs.com/jkisjk/archive/2013/01/07/2848687.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/12/10/selector4_Determining_the_Subject_of_a_Selector.html
selector4 之 巧妙的主体定义符 - JKisJK
“我叫土旦然”在Wed群里问“css选择符能不能选择一个元素的前一个元素?”印象里,css的几个关系符: _ 后代 > 亲子 + 弟弟 ~ 弟弟们都是向后找的。。。。没有向前找的。即在参考节点后面的才可能找到。向后找的好处是:查找的方向是单向的,如果支持向前找,路径算法会麻烦很多。。。不过土旦然的需求也很合理,晚上去看了下css4的草案,真的有类似的方案:selector主体定义符:"!"http://dev.w3.org/csswg/selectors4/#subject如果浏览器真的实现了,就可以下面这句很简单的话来实现土旦然的需求了:!div + #myId {
2012-12-10T13:07:00Z
2012-12-10T13:07:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】“我叫土旦然”在Wed群里问“css选择符能不能选择一个元素的前一个元素?”印象里,css的几个关系符: _ 后代 > 亲子 + 弟弟 ~ 弟弟们都是向后找的。。。。没有向前找的。即在参考节点后面的才可能找到。向后找的好处是:查找的方向是单向的,如果支持向前找,路径算法会麻烦很多。。。不过土旦然的需求也很合理,晚上去看了下css4的草案,真的有类似的方案:selector主体定义符:"!"http://dev.w3.org/csswg/selectors4/#subject如果浏览器真的实现了,就可以下面这句很简单的话来实现土旦然的需求了:!div + #myId { <a href="https://www.cnblogs.com/jkisjk/archive/2012/12/10/selector4_Determining_the_Subject_of_a_Selector.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/10/24/useless_javascript_label.html
神奇的"javascript:" - JKisJK
上周,从 GuoXing同学 http://weibo.com/runflash 那里学习的一个知识点,没等到他的博客,我就抢先记录一下。(捋须笑过)问题:以下代码里的“javascript:”是起什么作用?<input type=button value=test onclick="javascript:alert(1)"/> 在href里写“javascript:alert(1)”,这里是作伪协议,不过在onclick里写,是有什么用呢?难道是指定语言类型? ok,再我们改下试下:<input type=button value=test onclic
2012-10-24T08:41:00Z
2012-10-24T08:41:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】上周,从 GuoXing同学 http://weibo.com/runflash 那里学习的一个知识点,没等到他的博客,我就抢先记录一下。(捋须笑过)问题:以下代码里的“javascript:”是起什么作用?<input type=button value=test onclick="javascript:alert(1)"/> 在href里写“javascript:alert(1)”,这里是作伪协议,不过在onclick里写,是有什么用呢?难道是指定语言类型? ok,再我们改下试下:<input type=button value=test onclic <a href="https://www.cnblogs.com/jkisjk/archive/2012/10/24/useless_javascript_label.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/09/29/ie8_querySelectorAll_Invalid_argument.html
某台机器上IE8抛“Invalid procedure call or argument”异常 - JKisJK
某台机器上,访问公司的好几个产品网站,都抛出很多“Invalid procedure call or argument”,跟进了下,情况最后简化为:1. 环境:browser_info:"platform:Win32;msie;version:8.0;ie",navigator:"appCodeName:Mozilla;appName:Microsoft InternetExplorer;appMinorVersion:Release Candidate1;cpuClass:x86;platform:Win32;systemLanguage:zh-cn;userL
2012-09-29T09:47:00Z
2012-09-29T09:47:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】某台机器上,访问公司的好几个产品网站,都抛出很多“Invalid procedure call or argument”,跟进了下,情况最后简化为:1. 环境:browser_info:"platform:Win32;msie;version:8.0;ie",navigator:"appCodeName:Mozilla;appName:Microsoft InternetExplorer;appMinorVersion:Release Candidate1;cpuClass:x86;platform:Win32;systemLanguage:zh-cn;userL <a href="https://www.cnblogs.com/jkisjk/archive/2012/09/29/ie8_querySelectorAll_Invalid_argument.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/08/15/self_exec_function.html
自执行函数的几种不同写法的比较 - JKisJK
经常需要一个函数自执行,可惜这一种写法是错的:function(){alert(1);}();原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从而让后面的“();”变得孤立,产生语法错。按上面的分析,这一段代码虽说没有语法错,但也是不符合我们的预期的,因为这个函数并没有自执行。function(){alert(1);}(1);综上,症结在于,如何明确代码描述的是一个函数表达式,而不是函数声明语句。正确的写法多种多样,也各有利弊:方法1:最前最后加括号(function(){alert(1);}());这是jslint推荐的写法,好处是,能提醒阅
2012-08-15T10:21:00Z
2012-08-15T10:21:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】经常需要一个函数自执行,可惜这一种写法是错的:function(){alert(1);}();原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从而让后面的“();”变得孤立,产生语法错。按上面的分析,这一段代码虽说没有语法错,但也是不符合我们的预期的,因为这个函数并没有自执行。function(){alert(1);}(1);综上,症结在于,如何明确代码描述的是一个函数表达式,而不是函数声明语句。正确的写法多种多样,也各有利弊:方法1:最前最后加括号(function(){alert(1);}());这是jslint推荐的写法,好处是,能提醒阅 <a href="https://www.cnblogs.com/jkisjk/archive/2012/08/15/self_exec_function.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/08/11/about_stk.html
围观STK - JKisJK
先科谱一下,STK是新浪微博的前端javascript脚本库,这个介绍很风趣: STK起源于sina twitter`s kit。 后来内部改成史塔克了,是钢铁侠的主角托尼·史塔克的意思,世界最大的军火商。 但这史塔克这名字太晦涩难记,后来传着传着就成沙滩裤了,没啥具体含义,只是谐音好说。其实听到STK已经有很多次了,不过可能是因为新浪的知识产权保护策略,源代码一直没有公开,所以我也一直没有去仔细了解。最近又听CJ同学讲到了STK,于是决心再去看一下,就算是苦B的看压缩后的代码。压缩后的代码来自这个网址:http://js.t.sinajs.cn/t4/home/js/base.js
2012-08-11T08:18:00Z
2012-08-11T08:18:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】先科谱一下,STK是新浪微博的前端javascript脚本库,这个介绍很风趣: STK起源于sina twitter`s kit。 后来内部改成史塔克了,是钢铁侠的主角托尼·史塔克的意思,世界最大的军火商。 但这史塔克这名字太晦涩难记,后来传着传着就成沙滩裤了,没啥具体含义,只是谐音好说。其实听到STK已经有很多次了,不过可能是因为新浪的知识产权保护策略,源代码一直没有公开,所以我也一直没有去仔细了解。最近又听CJ同学讲到了STK,于是决心再去看一下,就算是苦B的看压缩后的代码。压缩后的代码来自这个网址:http://js.t.sinajs.cn/t4/home/js/base.js <a href="https://www.cnblogs.com/jkisjk/archive/2012/08/11/about_stk.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/06/01/2531004.html
备忘:递归callee.caller导致死循环 - JKisJK
今天网友 Baobao包子 反映QWrap里的QW.EventH.getEvent有可能会产生死循环。代码如下: /** * 获得event对象 * @method getEvent * @param {event} event (Optional)event对象 默认为调用位置所在宿主的event * @param {element} element (Optional)任意element对象 element对象所在宿主的event * @return ...
2012-06-01T08:38:00Z
2012-06-01T08:38:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】今天网友 Baobao包子 反映QWrap里的QW.EventH.getEvent有可能会产生死循环。代码如下: /** * 获得event对象 * @method getEvent * @param {event} event (Optional)event对象 默认为调用位置所在宿主的event * @param {element} element (Optional)任意element对象 element对象所在宿主的event * @return ... <a href="https://www.cnblogs.com/jkisjk/archive/2012/06/01/2531004.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/04/23/javascript_shuffle.html
随机问题之--洗牌算法 - JKisJK
洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到。它可以抽象成这样:得到一个M以内的所有自然数的随机顺序数组。在百度搜“洗牌算法”,第一个结果是《百度文库-洗牌算法》:http://wenku.baidu.com/view/c4fea82658fb770bf78a55b7.html扫了一下里面的内容,很多内容都容易误导别人走上歧途,包括最后用链表代替数组,也只是一个有限的优化(链表也引入了读取效率的损失)。该文里的第一种方法,可以简单描述成:随机抽牌,放在另一组;再次抽取,抽到空牌则重复抽。“抽到空牌则重复抽”这会导致后面抽到空牌的机会越来越大,显然是不合理的。可以优化一步成:牌抽
2012-04-23T13:23:00Z
2012-04-23T13:23:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到。它可以抽象成这样:得到一个M以内的所有自然数的随机顺序数组。在百度搜“洗牌算法”,第一个结果是《百度文库-洗牌算法》:http://wenku.baidu.com/view/c4fea82658fb770bf78a55b7.html扫了一下里面的内容,很多内容都容易误导别人走上歧途,包括最后用链表代替数组,也只是一个有限的优化(链表也引入了读取效率的损失)。该文里的第一种方法,可以简单描述成:随机抽牌,放在另一组;再次抽取,抽到空牌则重复抽。“抽到空牌则重复抽”这会导致后面抽到空牌的机会越来越大,显然是不合理的。可以优化一步成:牌抽 <a href="https://www.cnblogs.com/jkisjk/archive/2012/04/23/javascript_shuffle.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2012/04/08/the_order_of_onclick_and_listeners.html
onclick与listeners的执行先后问题 - JKisJK
以下代码,会先执行onclick,然后再执行事件监控:<HTML><HEAD> <TITLE>JK Test</TITLE> <META content="text/html; charset=utf-8" http-equiv=Content-Type> <script src="http://s0.qhimg.com/lib/qwrap/110.js" type="text/javascript"></script> <style> d
2012-04-08T06:19:00Z
2012-04-08T06:19:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】以下代码,会先执行onclick,然后再执行事件监控:<HTML><HEAD> <TITLE>JK Test</TITLE> <META content="text/html; charset=utf-8" http-equiv=Content-Type> <script src="http://s0.qhimg.com/lib/qwrap/110.js" type="text/javascript"></script> <style> d <a href="https://www.cnblogs.com/jkisjk/archive/2012/04/08/the_order_of_onclick_and_listeners.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2011/12/31/textarea_and_lazyRender.html
Textarea与懒惰渲染 - JKisJK
2008年有啊第一次性能优化时,我们曾用textarea来存贮需要懒惰渲染的节点。代码如下。<div>立即渲染内容<ul> <li>张三<img src="p01.jpg"/></li> <li>张四<img src="p02.jpg"/></li></ul></div><div><textarea id="lazyRender01" style="display:none"&g
2011-12-31T13:12:00Z
2011-12-31T13:12:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】2008年有啊第一次性能优化时,我们曾用textarea来存贮需要懒惰渲染的节点。代码如下。<div>立即渲染内容<ul> <li>张三<img src="p01.jpg"/></li> <li>张四<img src="p02.jpg"/></li></ul></div><div><textarea id="lazyRender01" style="display:none"&g <a href="https://www.cnblogs.com/jkisjk/archive/2011/12/31/textarea_and_lazyRender.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/jkisjk/archive/2011/11/27/qwrap_selector_w3c.html
QWrap Selector之W3C版 - JKisJK
之前也曾经有过一系列《QWrap Selector解密》 文章,讲到过QWrap里的dom/selector.js里的大多数要点。今天又整了一个完全依赖浏览器的querySelectorAll的slector版本:selector_w3c.js。与之前的selector.js的接口名称相同。我们自己写一个selector.js,这样我们就有弥补标准的不足的自由。例如,就算最新的浏览器,也依然没有人严格实现matchesSelector。而我们的selector.js里早就有了filter与test方法来实现matchesSelector的功能。从另一个角度看,我们有时需要为某些特定场景定制一些
2011-11-27T11:06:00Z
2011-11-27T11:06:00Z
JKisJK
https://www.cnblogs.com/jkisjk/
【摘要】之前也曾经有过一系列《QWrap Selector解密》 文章,讲到过QWrap里的dom/selector.js里的大多数要点。今天又整了一个完全依赖浏览器的querySelectorAll的slector版本:selector_w3c.js。与之前的selector.js的接口名称相同。我们自己写一个selector.js,这样我们就有弥补标准的不足的自由。例如,就算最新的浏览器,也依然没有人严格实现matchesSelector。而我们的selector.js里早就有了filter与test方法来实现matchesSelector的功能。从另一个角度看,我们有时需要为某些特定场景定制一些 <a href="https://www.cnblogs.com/jkisjk/archive/2011/11/27/qwrap_selector_w3c.html" target="_blank">阅读全文</a>