JavaScript:获取搜索文本在正文上的滚动位置

JavaScript: get scrollY position of searched text on body

本文关键字:滚动 位置 正文 获取 搜索 文本 JavaScript      更新时间:2023-12-16

我需要搜索文本的scrollY位置。如何在正文中查找文本并获取所查找文本的scrollY位置。

以下代码是关于问题的示例:(一切正常)

<script>
    function getScrollYPosition(var str){
        /* step 1: search str in <body> and found.
         * step 2: get scrollY position of found str.
         * step 3: return position. (500)
         */
    }
</script>
<body>
    <p>Hello world</p> /*For example scrollY position is 500*/
    <p>...</p>
    <p>...</p>
</body>

您可以首先匹配文本字符串,
将其包装成(span)元素
然后计算元件偏移位置

以下是的一个快速示例

var word = 'dolor';
var rgx = new RegExp('''b('+word+')''b', 'ig');
// CREATE SPAN ELEMENTS WHAT WILL WRAP THE QUERY STRING (WORD)
$('div, div *').contents().filter(function() {
  return this.nodeType === 3;
}).each(function() {
  $(this).replaceWith($(this).text().replace(rgx, "<span class='match'>$1</span>"));
});
// COLLECT ALL SPAN POSITIONS
var positions = $('.match').map(function(){
  return this.getBoundingClientRect().top;
}).get();
alert(positions);
div{font-size:50px;}
span.match{background: gold;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut voluptatum, provident saepe. Culpa animi sint, itaque iure error hic qui blanditiis perspiciatis adipisci, libero quia veritatis dignissimos quasi id cumque!</div>
<div>Magni cupiditate laudantium, corrupti commodi, reiciendis consequuntur recusandae minima tempore id placeat rerum saepe molestiae, nulla illo, dolores distinctio aliquid asperiores esse maxime voluptatibus corporis at. Commodi eius magni esse!</div>
<div>Maiores explicabo, dolor nemo mollitia cumque et nobis quae consectetur alias dicta quod facere saepe aspernatur sint ex soluta nulla veritatis ab. Sunt aspernatur distinctio quam alias quis possimus reiciendis impedit.</div>
<div>Est sequi eius nam, odio ut commodi quam omnis aperiam, vel, sunt quaerat adipisci voluptates natus possimus consequuntur corporis atque facere corrupti, rem autem modi ipsam inventore nobis! Itaque, modi?</div>
<div>Velit, cumque in dicta ratione iste autem, atque dolor magni optio, excepturi qui ipsam laboriosam modi quidem cupiditate sapiente perferendis! Iste eos fuga ut eum deserunt repellendus ex qui, illo eaque!</div>
<div>Ullam a, labore aperiam ex culpa nesciunt ipsam voluptatibus maiores consequatur qui repellendus obcaecati tenetur, consectetur eos, ut voluptate, nemo placeat soluta odit? Error, Dolor, voluptatibus! Id sed alias et consectetur.</div>
<div>Ipsa pariatur tenetur, nobis recusandae deserunt quisquam nesciunt, ex consequuntur minus voluptatem dolores officiis itaque fuga reiciendis dolor praesentium quae maxime repudiandae. Quibusdam sint fugit soluta pariatur, alias, eveniet natus culpa!</div>

您可以更具体地回答。如果我理解正确,你需要找到一个包含给定文本的元素,并获得它的垂直偏移量。您可以尝试以下操作:

$($(":contains(YOUR_TEXT)").slice(-1)[0]).offset().top