2017-02-08 3 views
0

私はversesという名前の配列を持っています。この配列には、ajaxレスポンスから作成された文字列が含まれています。配列は、このように作成されます。Javascriptを挿入する奇妙なnewLine文字

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

後、私はいくつかの<span>要素を作成し、配列から値を追加します。しかし配列の最後の要素は、ASCIIで隠されたnew line文字を含んでいるため、常に奇妙な動作をします。コードは10です(コンソールでチェックされています)。今度はコンソールログの最後の要素を配列aから出力すると、この結果が得られます:"string"

"string 
" 

スパンを作成するとき、それは常にこの奇妙なnew line文字を挿入するためです。そして、私は私が手スパンから値を返す取得する場合、後でこの文字列が含まれており、span要素を作成します。したがって、ソースコードの範囲は次のようになります。

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

閉じるタグが次の行にあることがわかります。コンソールで

私はいくつかのブレークポイントを使用して、私はスパンから抽出し、この値ました:"string↵"

は今、このスパンを作成するときにnew line文字を挿入し、なぜそれがでのみ起こるんjavascriptの理由の任意のアイデアを誰が持っています配列の最後の要素ですか?

スパン要素を作成するために使用されるコード:

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]+":"); 
} 
+4

あなたは*すべての*改行をスクラブしたい場合、それは '' .replace(/ \ N/gで、 '')です - あなたのコードは、**交換されます最初の**改行。 – Pointy

+1

'.replace(/ \ n \ r | \ n | \ r/g、 '')'を試してください – MysterX

+0

ありがとう、@MysterX!それはうまくいった! –

答えて

1

は時々、改行は異なるスタイルで印刷されています。通常は、2つの特殊文字\n\rの組み合わせであるため、可能なすべてのタイプの改行の組み合わせや壊れた壊れた部分をチェックするだけで済みます。それらすべてを合わせてRegExpを変更しよう:

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