2017-08-30 77 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; 
    } 
}