Это статичный и, следовательно, класс scope -> 1.
Edit: на самом деле это зависит от загрузчиков классов. В общем случае у вас есть одна копия класса, но если у вас есть несколько классных загрузчиков / репозитариев классов (возможно, это относится к серверам приложений и т. Д.), Вы можете получить больше.
Проблема в функции removeType
состоит в том, что вы не попадаете в тело if (isTag)
, когда вы только что проанализировали <
. Так что этот символ останется видимым до следующего таймера.
Исправьте это, изменив это условие if
на:
if (isTag || char === '<')
Не связано, но вы также должны изменить:
if(text == 0){
.... потому что это условие никогда не будет true (если только первый символ вашего полного текста не равен «0»). Измените его на:
if (!text.length){
Заменить
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>