innerHTML все еще считает тег?

Это статичный и, следовательно, класс scope -> 1.

Edit: на самом деле это зависит от загрузчиков классов. В общем случае у вас есть одна копия класса, но если у вас есть несколько классных загрузчиков / репозитариев классов (возможно, это относится к серверам приложений и т. Д.), Вы можете получить больше.

-4
задан MR.JD 18 January 2019 в 09:54
поделиться

2 ответа

Проблема в функции removeType состоит в том, что вы не попадаете в тело if (isTag), когда вы только что проанализировали <. Так что этот символ останется видимым до следующего таймера.

Исправьте это, изменив это условие if на:

if (isTag || char === '<')

Не связано, но вы также должны изменить:

if(text == 0){

.... потому что это условие никогда не будет true (если только первый символ вашего полного текста не равен «0»). Измените его на:

if (!text.length){
0
ответ дан trincot 18 January 2019 в 09:54
поделиться

Заменить

    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>

0
ответ дан Lortet 18 January 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: