我正在构建一个搜索自动建议组件,其中使用hyperHTML呈现结果。从服务器返回的建议的匹配字符串部分应突出显示。
我使用RegEx和String.prototype.replace来突出显示匹配的部分,但不知何故无法将其返回值输出到HTML。它只是将<strong>标记呈现为字符串。
我尝试了很多不同的方法来解决这个问题,但都没有成功,而且已经没有想法了……
这是我的渲染函数:
const suggestionsContainer = document.querySelector(
".js-suggestions-container"
);
const suggestions = [{
title: "lorem ipsum dolor sit amet",
url: "#"
},
{
title: "lorem ipsum dolor sit amet",
url: "#"
}
];
let query = "ipsum";
function renderSuggestions(suggestions, query) {
const queryRegEx = new RegExp(query, "gi");
hyperHTML.bind(suggestionsContainer)`
${suggestions.map((suggestion) => hyperHTML.wire(suggestion)`
<a href="${suggestion.url}">
${hyperHTML.wire()`${suggestion.title.replace(queryRegEx, "<strong>$&</strong>")}`}
</a>
`)}
`;
}
renderSuggestions(suggestions, query);a {
display: block;
margin: 1rem 0;
}<script src="https://unpkg.com/hyperhtml@latest/min.js"></script>
<div class="js-suggestions-container"></div>
发布于 2020-07-15 15:53:01
正如您可以使用see in this CodePen一样,您唯一需要的更改是显式地请求html
${suggestions.map((suggestion) => hyperHTML.wire(suggestion)`
<a href="${suggestion.url}">
${{html: suggestion.title.replace(queryRegEx, "<strong>$&</strong>")}}
</a>
`)}{html: ...}是最明显的方式,但hyperHTML也将数组作为HTML语言注入,但这可能是意想不到的,而lighterhtml和micro html在缺省情况下都更安全,插入的内容必须始终显式注入。
另外,将文本作为内容进行连接也几乎是不必要的
https://stackoverflow.com/questions/62900040
复制相似问题