選取頁面上的所有元素


原文出處:伯樂在線
[].forEach.call($$(""),function(a){
   a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16);
 })

這行代碼獲取了頁面中所有元素,然后給它們加上1px,顏色隨機的邊框

1. 選取一個頁面上所有的元素

 $$ 函數是現代瀏覽器命令行的API的一部分,它等同於使用 document.querySelectorAll 方法。可以將一個CSS選擇器作為參數傳入 document.querySelectorAll 去選取當前頁面的元素。所以如果想在瀏覽器的控制台以外使用那個單行代碼,可以用 document.querySelectorAll('*') 來替代 $$('*') 

單行代碼用 [].forEach.call 來替代 Array.prototype.forEach.call 。通過Array對象 [] 去調用Array的函數這樣的方式,節省了一些字節。這相當於在 $$('*').forEach 中,把 $$('*') 當成一個Array來使用。

2. 給元素上色

為了使這些元素都有漂亮的邊框,代碼使用了CSS的 outline 屬性。顯示的邊框是在CSS區塊模型外的,它並不對元素本身在布局中的大小和位置產生任何影響,因此該屬性非常適合用來實現當前的需求。 它的語法就像border的一樣:

 a.style.outline="1px solid #" + color 

3. 定義顏色的方式

 ~~(Math.random()*(1<<24))).toString(16) 

因為 Math.random 返回的值是浮點數,而顏色只需要整數部分。這里使用了波浪符號( ~)去實現。波浪符號用於對一個變量按位取反(作用可以記為把數字取負然后減一)。代碼重點不在於按位取反,而在於利用位操作符會丟棄浮點數中的小數部分的特性,因此連續兩次按位取反是一個替代 parseInt 的便捷方法:

var a = 12.34, // ~~a = 12
b = -1231.8754, // ~~b = -1231
c = 3213.000001; // ~~c = 3213

~~a == parseInt(a, 10); // true
~~b == parseInt(b, 10); // true
~~c == parseInt(c, 10); // true

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM