We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
github代码地址
[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
使用 document.querySelectorAll [].forEach.call(document.querySelectorAll("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
document.querySelectorAll
[].forEach.call(document.querySelectorAll("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
使用hsl颜色 for(i=0;A=$$("*")[i++];)A.style.outline="solid hsl("+(A+A).length*9+",99%,50%)1px"
for(i=0;A=$$("*")[i++];)A.style.outline="solid hsl("+(A+A).length*9+",99%,50%)1px"
代码先转成三行
[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) })
函数$$();在现代浏览器的API中几乎都有支持,等价于 document.querySelectorAll();
$$()
document.querySelectorAll();
$$('_')将所有DOM元素转成NodeList对象,但这并不是一个JS数组,所以不能用$$('_').forEach()方法来迭代,所以使用call或者apply方法来使用foreach
$$('_').forEach()
[].forEach.call 等价于 Array.prototype.forEach.call 不过前者字节更少
[].forEach.call
Array.prototype.forEach.call
首先,为什么使用outline 而不是 border? 因为border是在元素的CSS盒模型之内,outline在CSS盒模型之外,所以添加outline之后不会影响布局。
然后最有趣的部分:随机生成颜色函数 (~~(Math.random()*(1<<24))).toString(16)
(~~(Math.random()*(1<<24))).toString(16)
我们使用十六进制的的颜色 0~ffffff 并且 parseInt('ffffff',16) == 16777215 == 2^24-1
parseInt('ffffff',16) == 16777215 == 2^24-1
位运算 1>>24 == 16777216
Math.random()*(1<<24) 返回 (0,16777216)之间的 _浮点数, 等于十六进制的 0~ffffff
使用~取反,~~连续取反可以去掉浮点数的小数部分,所以~~等价于parseInt()
~
~~
~12.3 == -13 ~~12.3 == 12 ~-12.98 == 11 ~~12.98 == 12
使用toString(16)转换成16进制数(颜色)
这篇原文下面的评论也很有意思,歪果仁写了更多版本的代码。
The text was updated successfully, but these errors were encountered:
~~第四个例子错了 ~~12.98 == 12
Sorry, something went wrong.
ccforward
No branches or pull requests
一行代码调试 CSS
github代码地址
一、代码
108字节
[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
131字节
使用
document.querySelectorAll
[].forEach.call(document.querySelectorAll("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
更短的版本:82字节版本
使用hsl颜色
for(i=0;A=$$("*")[i++];)A.style.outline="solid hsl("+(A+A).length*9+",99%,50%)1px"
二、源码解读
代码先转成三行
1、选取页面所有DOM元素
函数
$$()
;在现代浏览器的API中几乎都有支持,等价于document.querySelectorAll();
2、迭代DOM元素
$$('_')将所有DOM元素转成NodeList对象,但这并不是一个JS数组,所以不能用
$$('_').forEach()
方法来迭代,所以使用call或者apply方法来使用foreach[].forEach.call
等价于Array.prototype.forEach.call
不过前者字节更少3、给元素添加ouline
首先,为什么使用outline 而不是 border?
因为border是在元素的CSS盒模型之内,outline在CSS盒模型之外,所以添加outline之后不会影响布局。
然后最有趣的部分:随机生成颜色函数
(~~(Math.random()*(1<<24))).toString(16)
我们使用十六进制的的颜色 0~ffffff
并且
parseInt('ffffff',16) == 16777215 == 2^24-1
位运算 1>>24 == 16777216
Math.random()*(1<<24) 返回 (0,16777216)之间的 _浮点数, 等于十六进制的 0~ffffff
使用
~
取反,~~
连续取反可以去掉浮点数的小数部分,所以~~
等价于parseInt()使用toString(16)转换成16进制数(颜色)
其他
这篇原文下面的评论也很有意思,歪果仁写了更多版本的代码。
The text was updated successfully, but these errors were encountered: