1

嘿有一些“简单”的文本替换问题......有一个 html 页面,想用二维字段做一些简单的替换

函数“createArray”没有类似问题的答案,但我无法让它工作:

<script type="text/javascript">
 function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

window.onload = function(){
    var tabelle = createArray(14, 2);
        tabelle[0][0]="Comment:Header";     tabelle[0][1]="test";
        tabelle[1][0]="Comment:Lane";       tabelle[1][1]=" ";
        tabelle[2][0]="Comment:VS";         tabelle[2][1]=" ";
        tabelle[3][0]="Comment:Early1";     tabelle[3][1]=" ";
        tabelle[4][0]="Comment:Early2";     tabelle[4][1]=" ";
        tabelle[5][0]="Comment:Early3";     tabelle[5][1]=" ";
        tabelle[6][0]="Comment:Mid1";       tabelle[6][1]=" ";
        tabelle[7][0]="Comment:Mid2";       tabelle[7][1]=" ";
        tabelle[8][0]="Comment:Mid3";       tabelle[8][1]=" ";
        tabelle[9][0]="Comment:Late1";      tabelle[9][1]=" ";
        tabelle[10][0]="Comment:Late2";     tabelle[10][1]=" ";
        tabelle[11][0]="Comment:Late3";     tabelle[11][1]=" ";
        tabelle[12][0]="Comment:etc1";      tabelle[12][1]=" ";
        tabelle[13][0]="Comment:etc2";      tabelle[13][1]=" ";
    for (var i = 0; i < tabelle.length; i++)
        document.body.innerHTML = 
        document.body.innerHTML.replace(tabelle[i][0], tabelle[i][1]);
    };
</script>

thx 已经 ;D

编辑:http: //jsfiddle.net/kF7kg/

4

3 回答 3

2

有关您的错误的更多信息会有所帮助,但我确实注意到您有:

for (var i = 0; i <= 14; i++)

而不是正确的:

for (var i = 0; i < 14; i++)

甚至更好:

for (var i = 0; i < tabelle.length; i++)
于 2013-04-22T20:36:08.910 回答
0

我会以不同的方式处理这个问题。

var replacements = {
        "Comment:Header": "test",
        "Comment:whatever": "test2",
        // etc..
};
window.onload = function(event) {
    for (var key in replacements) {
        if (replacements.hasOwnProperty(key)) {  
            document.body.innerHTML =
               document.body.innerHTML.replace(key, replacements[key]);
        };
    };
};

我真的会避免整个麻烦。对于您正在尝试做的事情,有一种更简单、更合适的方法。而且这也是处理此类事情的默认方式。

  • 更少的代码。
  • 更具可读性。
  • 易于维护。
  • 易于检查是否存在替代品(typeof replacements["Comment:whatever"] !== 'undefined')。O(1),不需要转换。无需搜索算法。
  • 没有 JS 怪异和无意义的操作。
  • 执行速度更快,性能增益可以忽略不计,但存在。
  • 可以国际化。

这里是工作小提琴

于 2013-04-22T23:16:49.727 回答
0

你的代码对我很有用。您遇到的问题是因为您忘记在页面加载后运行脚本。所以你可能会在还没到的document.body.innerHTML时候打电话。document.body

记得把它们包起来

window.onload = function() {
   //doing something here
};

这是一个工作演示:http: //jsfiddle.net/9aP86/1/

希望能帮助到你。

于 2013-04-22T20:46:19.150 回答