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 を設定し、配列に 1 回だけアクセスし、コードを繰り返す必要もありません。

于 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 に答える