提问人:LessTRess 提问时间:6/22/2023 更新时间:6/22/2023 访问量:239
将窗口滚动到大量文本中的特定文本 (React)
Scrolling the window to specific text within a large amount of text (React)
问:
(这都是在基于类的组件中)
我有一个组件,它基本上处理将文本文件逐行转储到页面上。该文本文件的每个句子都由一行分隔,并在其自己的元素中,如下所示:<p>
{this.state.contract.text.map((line, index) => (
<p key={index}>{line}
<Highlighter
highlightClassName="MyHC"
highlightStyle={{backgroundColor: "#ffd500"}}
searchWords={queryWords}
autoEscape={true}
textToHighlight={line}/>
</p>
))}
我很好奇我如何滚动到这个大型文本转储中的特定文本位,特别是出现在 queryWords 中的单词,它只是一个字符串。我猜,在呈现整个页面后,我必须这样做,但不确定我会在哪里调用一个函数,该函数可以在考虑该 queryWords 变量的情况下执行类似操作。理想情况下,文本会根据整个文本中的 queryWords 突出显示,然后窗口滚动到突出显示的第一个实例。<p>
我有一种方法是只接受这个queryWords并用它做一些事情:
$(`*:contains('${queryWords}'):first`);
但这给我带来了一些麻烦。是否有任何其他方法可以滚动到已呈现的特定文本字符串(以及我在哪里调用函数来执行此操作,在第一个代码片段之后或在 componentDidMount 中)?
答:
0赞
AbuAli
6/22/2023
#1
制作一个输入 HTML 标签和一个按钮。写下文本并按下按钮,它将找到它的位置并滚动它。
html格式:
<button onclick="findt()" type="submit" class="btn btn-danger">Find Text</button>
<input id="inputtext" value="">
JavaScript的:
function getOffset(el) {
const rect = el.getBoundingClientRect();
return {
left: rect.left + window.scrollX,
top: rect.top + window.scrollY
};
}
function findt(){
var text = document.getElementById("inputtext").value;
var pels = document.querySelectorAll("p");
for (var pe of pels){
var te = pe.innerHTML;
console.log(text);
console.log(te.match(text));
if (te.match(text)!=null){
console.log(pe.innerHTML);
var rect = getOffset(pe);
console.log(rect);
console.log(rect.left);
console.log(rect.top);
window.scrollBy(rect.left,rect.top)
}
}
}
评论
0赞
LessTRess
6/22/2023
出于某种原因,我无法让它工作,尽管我很欣赏这个想法。此文本转储是在 TabPane 内完成的这一事实是否会干扰此解决方案?
0赞
AbuAli
6/22/2023
不,它是一个简单的普通 JS 代码,所以它也应该在 TabPane 中工作。查看链接:docs.oracle.com/javafx/2/deployment/javafx_javascript.htm
上一个:React 扩展了函数组件?
下一个:参考电流仅在类组件中就绪
评论
ref
id
class
document.getElementById
element.getBoundingClientRect()
window.scrollTo(...)
Highlighter