0
<script type = "text/javascript">
//Add spaces between menu links
//Placement: Global Header
//Coded by Game

var spaces = "2";  //Edit number of spaces between menu links (1,2 or 3)

var a = document.getElementsByTagName("a");
for (i = 0; i < a.length; i++) {
    if (a[i].parentNode.parentNode.className == "menubg" && a[i].innerHTML.match(/Home|new topics|help|search|members|calendar|admin|profile|logout|register|login/i)) {
        if (spaces == "1") {
        a[i].innerHTML += "&nbsp;";
        }
        if (spaces == "2") {
        a[i].innerHTML += "&nbsp;&nbsp;";
        }
        if (spaces == "3") {
        a[i].innerHTML += "&nbsp;&nbsp;&nbsp;";
        }
    }   
}
</script>

上面的代码是为了让用户在他们的菜单项之间添加空格。它工作正常。但是我怎样才能让它可以添加任意数量的空格,而不是限制为 3 个呢?也许他们会以某种方式将他们的数字添加到 var 'spaces' 中,并且代码会将   乘以那个数字?

4

4 回答 4

4

只需使用一个循环:

var spaces = 2; 

[..]

for(var i = 0; i < spaces; ++ i)
    a[i].innerHTML += "&nbsp";
于 2012-09-04T23:20:28.947 回答
1

我会在一个单独的方法中生成字符串,比如:

function getSpaces(count) {
var spaces = "";
for(var i = 0; i < count; i++) {
       spaces += "&nbsp";
}
return spaces;
}  

接着

a[i].innerHTML = getSpaces(2); //etc

这样你就可以设置 innerHTML 并只访问一次数组,也没有重复的代码。

于 2012-09-04T23:33:05.040 回答
0

尽可能避免innerHTML,因为它会删除并重新创建元素的全部内容。宁可appendChild取而代之createTextNode。例如:

a[i].appendChild(document.createTextNode(new Array(spaces + 1).join("\u00A0")));
于 2012-09-04T23:32:44.353 回答
0

你为什么不在你的if子句中创建一个循环,&nbsp;每次你通过循环时添加一个循环?

于 2012-09-04T23:22:13.407 回答