Javascript插入奇怪的newLine字符

时间:2017-02-08 15:41:20

标签: javascript jquery html arrays ascii

我有一个名为verses的数组,其中包含从ajax响应创建的字符串。该数组的创建方式如下:

verses.push(splitStr[i].replace('\n',''));

稍后我创建了一些<span>元素并附加了数组中的值。但是,数组中的最后一个元素总是有一个奇怪的行为,因为它在ASCII中包含一个隐藏的new line字符,它具有代码10(在控制台中检查过)。现在,当我在控制台中记录数组中的最后一个元素时,得到这个结果:"string"。然后我创建包含此字符串的span元素,稍后当我从span获取值时,我得到:

"string
"

那是因为在创建跨度时,它总是插入这个奇怪的new line字符。所以在源代码中,span看起来像:

<span class="answer" onclick="checkAnswer(this)">potopului
</span>

您可以看到结束标记位于下一行。

在控制台中我使用了一些断点,我从span:"string↵"

中提取了这个值

现在,有没有人知道为什么在创建此跨度时javascript会插入一个new line字符,为什么它只发生在数组中的最后一个元素?

用于创建span元素的代码:

for (var i = 0; i < 3; i++) {
        if (i!=phtml) {
            tags.push("<span class='answer' onclick='checkAnswer(this)'>"+generateRandom(pos)+'</span>'); 
            //generate a  string from the array different from the one with position pos
        }else{
            tags.push("<span class='answer'  onclick='checkAnswer(this)'>"+verses[pos].replace('\n','')+'</span>');
        }
    }
    var output='';
    for (var i = 0; i < tags.length; i++) {
        output = output + tags[i];
    }
    document.getElementsByClassName('v-options')[0].innerHTML = output;

checkAnswer()功能:

function checkAnswer(e){
    var text = e.innerHTML;
    var input = document.getElementsByClassName('hidden-word')[pos];
    if (text == verses[pos]) {
        input.value = verses[pos];
        input.setAttribute('disabled','');
    }
    console.log(":"+text.substring(0, text.length-1) + ":"+verses[pos]+":");
}

1 个答案:

答案 0 :(得分:1)

有时,换行符以不同的样式打印。通常它是两个特殊字符\n\r的组合,因此您只需要检查所有可能类型的换行组合或丢失的损坏部分。尝试更改RegExp以匹配所有内容:

splitStr[i].replace(/\n\r|\n|\r/g, '')