Не могли бы вы попробовать это
function createTagAndAppendTo(tag, txt, elem){
let customTag = document.createElement(tag);
customTag.textContent = txt;
elem.append(customTag);
}
function myFunction(evt) {
// Declare variables
let input, filter, table, tr, td, i, txtValue;
let displayTr = [];
filter = evt.value;
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
let regExp = new RegExp(filter);
if (!filter) {
for (let i = 0; i < tr.length; i++) {
tr[i].style.display = '';
}
return;
}
// Loop through all table rows, and hide those who don't match the search query
for (let i = 0; i < tr.length; i++) {
let trStyle = tr[i].style.display;
td = tr[i].getElementsByTagName("td");
for (let j = 0; j < td.length; j++) {
txtValue = td[j].textContent;
let count = (txtValue.match(regExp) || []).length;
displayTr[i] = displayTr[i] ? displayTr[i] : count;
if (count !== 0) {
td[j].innerText = '';
let strArray = txtValue.split(filter);
let loopLength = strArray.length - 1;
for (let i = 0; i < loopLength; i++) {
createTagAndAppendTo('span', strArray[i], td[j]);
createTagAndAppendTo('mark', filter, td[j]);
}
createTagAndAppendTo('span', strArray[loopLength], td[j]);
} else {
let tdStr = td[j].textContent;
td[j].innerText = '';
td[j].textContent = tdStr;
}
}
if(displayTr[i] !== 0) {
tr[i].style.display = '';
} else {
tr[i].style.display = 'none';
}
}
}
<input type="text" id="myInput" onkeyup="myFunction(this)" placeholder="Search...">
<table id="myTable">
<tr>
<td>...</td>
<td>success</td>
<td>Substring</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</table>