2017-08-30 117 views
-2

我正在嘗試製作一個小書籤,可以用它來快速切換元素的class/id。我發現這個[舊]代碼切換突出顯示的鏈接。我已經讀過,with聲明應該避免,除非你使用use strict;。我找不到任何穿行如何with會是什麼樣if,並且不知道它會怎樣看將一個with語句轉換爲一個可觸發if

javascript: for (nIx5Bs = 0; nIx5Bs < document.all.length; nIx5Bs++) { 
 
    if (document.all[nIx5Bs].tagName == 'A') { 
 
    with(document.all[nIx5Bs].style) { 
 
     if (backgroundColor == 'yellow') { 
 
     void(backgroundColor = document.bgColor) 
 
     } else { 
 
     void(backgroundColor = 'yellow') 
 
     } 
 
    } 
 
    } 
 
}

我發現了另一個書籤顯示id S,但它不是togglable。

javascript: var t = document.getElementsByTagName('div'); 
 
for (i = 0; i < t.length; i++) { 
 
    void(t[i].style.padding = '5px;'); 
 
    b = t[i].className; 
 
    h = t[i].innerHTML; 
 
    void(t[i].innerHTML = '<p style=\'color:red;font-weight:bold;\'>' + b + '</p>' + h); 
 
}

任何提示,使這個togglable將是巨大的。

+3

僅供參考,'無效(...)'這部分是無稽之談。只要刪除void('和')',它們就可以實現**零**目的。 –

+0

我知道那一部分。這不是我的代碼 –

+1

你說過,但你似乎也是JS的新手,所以... –

回答

1

with正試圖阻止您的變量範圍之前,塊範圍是一件事:),它與你的循環無關。

這是說在這個代碼塊開始在document.all[nIx5Bs].style和任何變量引用(backgroundColor)被追加到該點。 更現代的代碼將使用letconst阻止範圍

for (let i = 0, max = document.all.length; i < max; i++) { 
    let doc = document.all[i]; 

    if (doc.tagName === 'a') { 
    let style = doc.style; 
    if (style.backgroundColor !== 'yellow') { 
     style.backgroundColor = 'yellow'; 
     continue; 
    } 
    style.backgroundColor = document.bgColor; 
    } 
}