Вход

Просмотр полной версии : Баги при замена текста через Range


dbs74
20.01.2021, 16:23
доброго времени всем
вот код для рассмотрения
содержимое тэга 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
должна произойти замена выделенной части, что же ещё

рони
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,
ок, видимо я не понимаю вашей проблемы.