Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Баги при замена текста через Range (https://javascript.ru/forum/css-html/81735-bagi-pri-zamena-teksta-cherez-range.html)

dbs74 20.01.2021 16:23

Баги при замена текста через 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

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

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

рони 20.01.2021 16:35

dbs74,
что должно получится?

dbs74 21.01.2021 07:32

Вложений: 1
должна произойти замена выделенной части, что же ещё

рони 21.01.2021 09:38

dbs74,
не могу понять, чего вы хотите добиться.

пока для меня это выглядит так ...
function ff(s_id)
         {

            var sObj = document.getElementById(s_id);
            sObj.innerHTML = str;
         }

dbs74 21.01.2021 12:57

http://joxi.ru/52aZzgXUkBn84A

или вы весь код не видите или ещё что-то
html-ка приатаччена в zip-е

я хотел заменить выделенный кусок который визуально совпадает с номером телефона html-кодом из переменной str

рони 21.01.2021 13:15

dbs74,
ок, видимо я не понимаю вашей проблемы.


Часовой пояс GMT +3, время: 16:00.