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

时间:2016-04-04 22:58:56

标签: javascript jquery html

我需要搜索文本的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>

2 个答案:

答案 0 :(得分:1)

你的回答可能会更具体一些。如果我理解正确,您需要找到包含给定文本的元素并获取其垂直偏移量。您可以尝试以下方法:

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

答案 1 :(得分:1)

您可以先匹配文字字符串,
将其包装成(span)元素
并计算该元素偏移位置

这是一个简单的例子

&#13;
&#13;
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);
&#13;
div{font-size:50px;}
span.match{background: gold;}
&#13;
<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>
&#13;
&#13;
&#13;