在三星 S4下的实际显示效果:
可以看到这个时候1px的线竟然显示不出来了。这个问题是跟 S4手机的屏幕像素密度有关。关于屏幕像素密度和1px 线的关系有很多文章介绍,可以自行搜索了解。我这里的解决方案是,对1px 的线不做处理。是多少就写多少。就算我的基础单位是rem,也不是其它单位。
{position: absolute;width: 13rem;height: 9.2rem;border:1px solid #000;}2.pc 端浏览器和移动端浏览器容错率的差异$("[node-type=row-a").find("div");很明显可以发现,我使用的选择器是有语法错误的。但是在浏览器中运行会有什么结果呢?看下图:

很明显可以看出对于属性选择器,就算我有语法错误,PC 端浏览器也是可以正确解析的。但是在手机端,这种写法是不能够正确解析,代码不能够运行。
所以写代码的时候一定要注意一些小细节哈。。。
3.jQuery中选择器的使用
在使用 jQuery 或者是 Zepto 的过程中最经常使用的选择器的写法就是下面这样吧,
$("div.testClass")只是在$() 中写上自己需要的 Dom 节点的 class或者 ID 或 者使用属性选择器。
jQuery([selector,[context]])最重要的是看看对 context (它也是我们平时使用中最容易忽略,但是却非常有用的一个参数)的描述:

由图中的代码运行结果,可以知道在 jQuery对象上是没有我们要使用reverse方法的。尽管test是一个数组。
那么我们怎么办才可以让 jQuery对象使用原生的 Array对象的方法呢?
4.1使用原型链扩展
比如下面的代码:
jQuery.prototype.reverse=function(){//一些操作}使用prototype来扩展方法的时候,大家一直比较认为是缺点的就是可能会污染已经存在的原型链上的方法。还有就是访问方法的时候需要查找原型链。var test = $("div.test");var a=[];$(test).each(function(){a.push($(this));});a.reverse();这样就可以将 jQuery对象翻转。var test = $("div.test");var a= Array.from(test);a.reverse();5.setInterval()和setTimeout()对程序性能的影响
var a ={test:function(){setTimeout(this.bbb,1000);},bbb:function(){console.log("----");}};a.test()输出结果如下:
看下面的代码输出是什么
var a ={test:function(){setTimeout(function(){console.log(this);this.bbb();},1000);},bbb:function(){console.log("----");}};a.test();运行这段代码的时候,代码报错
由以上的结果可以知道,当我们在使用setInterval()和setTimeout()的时候,在回掉中使用this的时候,this的作用域已经发生了改变,并且指向了 window。
setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在”任务队列”的尾部添加一个事件,因此要等到同步任务和”任务队列”现有的事件都处理完,才会得到执行。
意思就是说在我们设置 setTimeout()之后,也可能不是立即等待多少秒之后就立即执行回掉,而是会等待主线程的任务都处理完后再执行,所以存在 “等待”超过自己设置时间的现象。同时也会存在异步队列中已经存在了其它的 setTimeout() 也是会等待之前的都执行完再执行当前的。
看一个 Demo:
setTimeout(function bbb(){},4000);function aaa(){setTimeout(function ccc(){},1000);}aaa();如果运行上面的代码,当执行完 aaa() 等待一秒后并不会立即执行 ccc(),而是会等待 bbb() 执行完再执行 ccc() 这个时候离主线程运行结束已经4s 过去了。