2017-02-08 4 views
0

У меня есть массив с именем verses, который содержит строки, созданные из ответа ajax. Массив создается следующим образом:Вставка javascript weird newLine

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

Позже я создаю некоторые <span> элементы и добавить значения из массива. Однако последний элемент из массива всегда имеет странное поведение, потому что он содержит скрытый символ new line в ASCII, он имеет код 10 (проверено, что в консоли). Теперь, когда я печатаю в консоли, последний элемент из массива получает этот результат: "string". Затем я создаю элемент диапазона, который содержит эту строку, а затем, когда я получить обратно значение из диапазона, я получаю:

"string 
" 

Это потому, что при создании пяди всегда вставляет этот странный new line характер. Таким образом, в исходном коде диапазон выглядит следующим образом:

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

Вы можете видеть, что закрывающий тег находится на следующей строке.

В консоли я использовал некоторые точки останова, и я получил это значение, извлеченное из диапазона: "string↵"

Теперь, есть кто-нибудь какие-либо идеи, почему при создании этого пяди Javascript вставляет new line характер и почему это происходит только с последний элемент из массива?

Код, используемый для создания элементов пролетных:

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

Если вы хотите, чтобы вычистить * все * новой строки, это '.Надеть (/ \ п/г,«»)' - ваш код только замена ** первая ** новая линия. – Pointy

+1

попробуйте '.replace (/ \ n \ r | \ n | \ r/g, '')' – MysterX

+0

Спасибо, @MysterX! Это сработало! –

ответ

1

Иногда разрывы строк печатаются в разных стилях. Обычно это комбинация двух специальных символов \n и \r, поэтому вам просто нужно проверить все возможные типы комбинаций новой строки или их потерянные сломанные детали. Попробуйте изменить RegExp, чтобы соответствовать их всех:

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