2012-09-04 46 views
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'中,並且代碼將會乘以該numvber中的數字?如何乘以一個變量?

回答

4

只需使用一個循環:

var spaces = 2; 

[..] 

for(var i = 0; i < spaces; ++ i) 
    a[i].innerHTML += "&nbsp"; 
0

你爲什麼不只是創建if子句中的循環,增加了每次都要經過循環時間&nbsp;

0

如果可以,請避免innerHTML,因爲它會刪除並重新創建元素的全部內容。改用appendChildcreateTextNode。例如:

a[i].appendChild(document.createTextNode(new Array(spaces + 1).join("\u00A0"))); 
1

我會生成字符串中一個單獨的方法,如:

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

然後

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

這樣你設置的innerHTML和訪問數組只有一次,也沒有重複的代碼。