Заменить
function removeType(i,isTag,text,str2) {
text = str2.slice(0, --i);
if(text == 0){
return;
}
document.getElementById('test').innerHTML = text;
var char = text.slice(-1);
if( char === '>' ) isTag = true;
if( char === '<' ) isTag = false;
if (isTag) return removeType(i,isTag,text,str2);
setTimeout(function() { removeType(i,isTag,text,str2);}, 100);
}
от
function removeType(i,isTag,text,str2) {
text = str2.slice(0, --i);
document.getElementById('test').innerHTML = text;
if(text === ''){
return;
}
var char = text.slice(-1);
if( char === '>' ) isTag = true;
if (isTag) {
if( char === '<' ) isTag = false;
return removeType(i,isTag,text,str2);
}
setTimeout(function() { removeType(i,isTag,text,str2);}, 100);
}
Есть две идентичные проблемы.
Если вы выйдете, когда строка пуста, но перед отображением обновления, символ останется (И строка == "" не 0)
Если вы скажете, что тег закончен во время его обработки, он появится. Вы должны помнить, что тег закончен для следующего раунда. Возможны несколько методов, но тот, который я предлагаю, не создает новых переменных.
Вы также можете использовать это для удаления тегов:
str2.replace(/<[^>]*>/g, '');
или (Внимание, строка должна быть доверенной):
var str2 = "Hello Stackoverflow<span class='punc'>?</span>";
const el = document.createElement('p');
el.innerHTML = str2;
str2 = el.innerText;
window.onload = function(){
var str2 = "Hello Stackoverflow<span class='punc'>?</span>";
i = 0;
j = 0;
isTag = false;
text = "";
type(i,isTag,text,str2);
}
function type(i,isTag,text,str2){
text = str2.slice(0, ++i);
if (text === str2) {
setTimeout(function() { removeType(i,isTag,text,str2);}, 2000);
return;
}
document.getElementById('test').innerHTML = text;
var char = text.slice(-1);
if( char === '<' ) isTag = true;
if( char === '>' ) isTag = false;
if (isTag) return type(i,isTag,text,str2);
setTimeout(function() { type(i,isTag,text,str2);}, 80);
}
function removeType(i,isTag,text,str2) {
text = str2.slice(0, --i);
document.getElementById('test').innerHTML = text;
if(text === ''){
return;
}
var char = text.slice(-1);
if( char === '>' ) isTag = true;
if (isTag) {
if( char === '<' ) isTag = false;
return removeType(i,isTag,text,str2);
}
setTimeout(function() { removeType(i,isTag,text,str2);}, 100);
}
<div id="test"> </div>