Показать сообщение отдельно
  #1 (permalink)  
Старый 20.01.2021, 16:23
Новичок на форуме
Отправить личное сообщение для dbs74 Посмотреть профиль Найти все сообщения от dbs74
 
Регистрация: 20.01.2021
Сообщений: 3

Баги при замена текста через Range
доброго времени всем
вот код для рассмотрения
содержимое тэга BODY
<table class="table" width="100%" cellspacing="0" cellpadding="0">
        <tr>
            <td id="visualTd" style="border-top:1px dotted #b2b2b2;">
                <span id="s1">
                    <b><font color="#e68f17">«TEST WITHOUT BR »</font></b>
                    <br><a href="http://test.ru"><font color="#99928a">+7 495</font> 550 03 60</a></span>
            </td>
        </tr>
    </table>
    <br /><br />
    <input type="button" onclick="ff('s1');" value="Test" />


содержимое тэга SCRIPT
var str  = '<font color="#99928a">+7 495</font> 550 03 60';
//var str = '<a href="http://test.ru">+7 495 550 03 60</a>';

function clearEmptyTag(str)
  {
      const reg = /<(font|a)[^>]*>\s*<\/\1>/gi;
      while (~str.search(reg))
       {
           str = str.replace(reg, '');
       }
       return str;
  }
function ff(s_id)
  {
      var r = window.getSelection().getRangeAt(0);

       var div = document.createElement("div");
       div.innerHTML = str;
       var frag = document.createDocumentFragment(), child;
       while ( (child = div.firstChild) )
         {
              frag.appendChild(child);
         }
        r.deleteContents();
        r.insertNode(frag);
        window.getSelection().removeAllRanges();
        
        // чистим паразитные пустые тэги
        var sObj = document.getElementById(s_id);
        sObj.innerHTML = clearEmptyTag(sObj.innerHTML);
  }


собственно я пытаюсь выделить блок со ссылкой http://joxi.ru/nAyMxvphwVW70A и далее заменить её кодом из строки в переменной str
собственно как можно догадаться я фактически пытаюсь вычистить в одном случае тэг ссылки, а в другом случае тэг шрифта

всё работает если я пытаюсь оставить в выделенном ссылку и убрать тэг font
в случае если я пытаюсь убрать из выделения ссылку и оставить раскрашивание, то кроме Mozilla не работает везде, а в Mozilla работает в том случае если за тэгом A перед закрывающим тэгом SPAN идёт какой-то любой тэг например BR

если собственно пытаться заменить просто текст, то всё также работает

заранее спасибо всем кто откликнется
Ответить с цитированием