Javascript jQuery live search-在页面找到所有可用结果后返回第一个结果

Javascript jQuery live search-在页面找到所有可用结果后返回第一个结果,javascript,jquery,jquery-ui,mobile,jquery-plugins,Javascript,Jquery,Jquery Ui,Mobile,Jquery Plugins,我正在使用mark.js插件,它允许在页面上搜索文本,它会在您键入文本时查找文本,如果您按Enter键,您将跳转到下一个结果,直到找到并突出显示所有结果。 唯一的问题是,当它到达最后一个结果时,它给出了已结束的搜索,如果您按Enter键,则无法从第一个结果重新启动搜索 我需要能够在找到最后一个结果后滚动回第一个结果(就像使用Google Chrome Find Box(Control+F)搜索时发生的情况一样) 您需要在小提琴中稍微滚动一下结果选项卡,以便查看搜索框 以下函数负责在结果之间滚动

我正在使用mark.js插件,它允许在页面上搜索文本,它会在您键入文本时查找文本,如果您按Enter键,您将跳转到下一个结果,直到找到并突出显示所有结果。 唯一的问题是,当它到达最后一个结果时,它给出了已结束的搜索,如果您按Enter键,则无法从第一个结果重新启动搜索

我需要能够在找到最后一个结果后滚动回第一个结果(就像使用Google Chrome Find Box(Control+F)搜索时发生的情况一样)

您需要在小提琴中稍微滚动一下结果选项卡,以便查看搜索框

以下函数负责在结果之间滚动,它将跳转到页面上找到的最后一个(下一个)文本:

done: function() {
                var mark = $('mark[data-markjs]').last();   // Scroll to last <mark>
                if (mark.length) {  
                    $('html,body').animate({scrollTop: mark.offset().top-100}, 100);
                }
            }

Thx提前。

从您提供的文档中,我能够找到一个突出显示所有单词并允许单词循环的实现。一般来说,更改如下:

  • 创建一个名为offset的数组,以跟踪高亮显示单词的当前“顶部偏移”。这是从容器顶部到高亮显示单词的距离度量

    arrowOffset = 0;
    var offsets = [];
    
  • 将options.done函数更改为以下实现:从搜索中获取所有偏移量,并将它们存储在数组偏移量中


  • 从您提供的文档中,我能够找到一个突出显示所有单词并允许单词循环的实现。一般来说,更改如下:

  • 创建一个名为offset的数组,以跟踪高亮显示单词的当前“顶部偏移”。这是从容器顶部到高亮显示单词的距离度量

    arrowOffset = 0;
    var offsets = [];
    
  • 将options.done函数更改为以下实现:从搜索中获取所有偏移量,并将它们存储在数组偏移量中


  • 有人吗?有人吗?有人吗?有那么难吗?=\124;他们没有丰富的文档,但有一部分谈到了突出显示:4.1 mark()一种突出显示自定义搜索词的方法。这样更好吗?让我知道,我会更改我的答案。这样更好。现在所有结果都显示出来了。但滚动条似乎存在错误。如果键入1并使用enter重复搜索,您会注意到在重复搜索后,在页面顶部出现问题。这是e我现在能做的最好。它更有效,因为它只在搜索完成时计算单词偏移量。它将这些偏移量存储在数组偏移量中,并解析键输入以将箭头偏移量更改为当前偏移量值。它与enter、up和down箭头一起工作。请将您的答案更改为最新的fiddle,我将其标记为最好的一个。他们没有丰富的文档,但有一部分是关于突出显示的:4.1 mark()一种突出显示自定义搜索词的方法。这样更好吗?让我知道,我会更改我的答案。这样更好。现在所有结果都显示出来了。但滚动条似乎存在错误。如果键入1并使用enter重复搜索,您会注意到在重复搜索后,在页面顶部出现问题。这是e我现在能做的最好。它更有效,因为它只在搜索完成时计算单词偏移量。它将这些偏移量存储在数组偏移量中,并解析键输入以将箭头偏移量更改为当前偏移量值。它与enter、up和down箭头一起工作。请将您的答案更改为最新的fiddle,我将其标记为最好的。
    var m = $('mark[data-markjs]');
    
    offsets = [];
    
    for (var i = 0; i < m.length; i++)
        offsets.push($(m[i]).offset().top);
    }
    
    e.preventDefault();
    
    if (e.which == 13 || e.which == 40) { // 13 = enter key, 40 = down arrow
      if (++arrowOffset >= offsets.length) {
        arrowOffset = 0;
      }
    } else if (e.which == 38) { // 38 = up arrow
      if (--arrowOffset < 0) {
        arrowOffset = offsets.length - 1;
      }
    }
    
    $('html,body').animate({
      scrollTop: offsets[arrowOffset] - 100
    }, 100);
    
    $("input[name='keyword']").on("keyup", mark);
    $("input[type='checkbox']").on("change", mark);