gpt4 book ai didi

jquery - 搜索并突出显示页面上的文本,同时保持 html 结构

转载 作者:行者123 更新时间:2023-12-03 22:46:59 25 4
gpt4 key购买 nike

可能已经有人问过类似的问题,但请仔细阅读详细信息。

我正在使用一种自制的自动完成功能,现在我想突出显示结果集中的搜索词。到目前为止,这有效,但仅限于纯文本。问题是:如果结果 div 中有一个,我需要保留 html 结构。请查看我的示例:目前我正在失去包含粗体类的跨度。我怎样才能保留它们?

感谢您的建议!

$('#box').keyup(function () {
const valThis = this.value;
const length = this.value.length;

$('.objType').each(function () {
const text = $(this).text();
const textL = text.toLowerCase();
const position = textL.indexOf(valThis.toLowerCase());

if (position !== -1) {
const matches = text.substring(position, (valThis.length + position));
const regex = new RegExp(matches, 'ig');
const highlighted = text.replace(regex, `<mark>${matches}</mark>`);

$(this).html(highlighted).show();
} else {
$(this).text(text);
$(this).hide();
}
});

});
input[type="text"] { 
width: 50%;
margin:10px;
padding: 5px;
float:left;
clear:left;
}
div{
float:left;
clear:left;
margin:10px 10px;
}
.bold {
font-weight: 700;
}
table td {
border: solid 1px #ccc;
padding: 3px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<input placeholder="Filter results" id="box" type="text" />

<div class="objType" id="item1">
<span class="bold">Accepted</span> Event Relation
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item2">
Case <span class="bold">Status</span> Value
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item3">
External <span class="bold">Data Source</span>
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item4">
Navigation <span class="bold">Link</span> Set
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>

PS:此外,JSFiddle 可能会有所帮助=>https://jsfiddle.net/SchweizerSchoggi/6x3ak5d0/7/

最佳答案

这是仅使用 native javascript 的可能基础。这有点像 CTRL+F

这似乎保留了 <td>元素。

清除功能取代mark元素由 wbr元素:

On UTF-8 encoded pages, <wbr> behaves like the U+200B ZERO-WIDTH SPACE code point. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr

function mark(it){
clearIt()
if (it.length > 2){
let c = new RegExp(it, "ig")
main.innerHTML = main.innerHTML.replace(c,"<mark>"+it+"</mark>")
}
}

function clearIt(){
let b = new RegExp("mark>", "ig")
main.innerHTML = main.innerHTML.replace(b,"wbr>")
}

mark(search.value)
input[type="text"] { 
width: 50%;
margin:10px;
padding: 5px;
float:left;
clear:left;
}
div{
float:left;
clear:left;
margin:10px 10px;
}
.bold {
font-weight: 700;
}
table td {
border: solid 1px #ccc;
padding: 3px;
}
<input onfocusout="clearIt()" oninput="mark(this.value)"  value="Lorem" id="search" placeholder="Lorem">
<button onclick="mark(search.value)">SEARCH</button>
<button onclick="clearIt()">CLEAR</button>

<div id="main">
<div class="objType" id="item1">
<span class="bold">Accepted</span> Event Relation
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item2">
Case <span class="bold">Status</span> Value
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item3">
External <span class="bold">Data Source</span>
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>
<div class="objType" id="item4">
Navigation <span class="bold">Link</span> Set
<table>
<tr>
<td>Lorem</td>
<td>ipsum</td>
</tr>
</table>
</div>

</div>

顺便说一句,恢复/清除的标记不是原始的,要完全恢复它,您可能需要在标记之前复制整个 html。

关于jquery - 搜索并突出显示页面上的文本,同时保持 html 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59178447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com