思路:p表示搜索框文本,s表示内容文本,首先使用s.indexOf(p)查找s中是否出现过p,如果出现过则使用new RegExp(p,'g')全局创建一个正则表达式,然后使用replace方法将s中的p全部替换为带样式的html内容,再将其更新为内容html,反之没有出现过则搜索所有b标签,并将其background-color样式设置为''或者透明。

<script>
   var text = document.querySelector(".text");
   var search = document.querySelector("input");
   const btn = document.querySelector("button");
   btn.onclick = () => {
     let s=text.innerText
     let p=search.value
     //加上g后replace才能全局匹配喔
     //注意 找到一次则替换全部
     if(s.indexOf(p)!=-1)
     {
        //使用输入框的值创建全局匹配的正则表达式对象
        let match=new RegExp(p,'g')
        let news=`<b style='background-color:yellow'>${p}</b>`
        text.innerHTML=s.replace(match,news)
     }
     else
     {
        let btags=document.querySelectorAll("b")
        for(let i=0;i<btags.length;i++)
           btags[i].style.backgroundColor=''
     }
  }
</script>

总结:s.indexOf(p)查找s中是否出现过p,如果出现过则返回第一次出现的下标,反之则返回-1;new RegExp (p,'g')全局创建一个正则表达式,其中p是匹配内容;str.replace(oldv,newv)将str中的oldv替换为newv。添加样式是在文本内容中替换搜索内容为带对应样式的搜索内容,由于替换后的带样式,故只能将其更新为样式文本;删除样式是找到所有带b标签的元素,并遍历他们将其背景颜色设为空或者透明。注意,到底是在文本上操作还是在内容上操作。