【问题标题】:jQuery live search - Go back to first result after the page has found all available resultsjQuery 实时搜索 - 页面找到所有可用结果后返回第一个结果
【发布时间】:2016-06-30 17:30:31
【问题描述】:

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

找到最后一个结果后,我需要能够滚动回第一个结果(就像您使用 Google Chrome 查找框 (Control + F) 搜索内容时发生的情况一样。

[Working Fiddle] 您需要稍微滚动一下小提琴中的结果选项卡,才能看到搜索框。

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

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

这个负责使用回车键触发上一个功能:

if(e.which==13){ // 13 = enter key
            e.preventDefault();
            arrowOffset++;
        }

提前致谢。

【问题讨论】:

  • 有人吗?有那么难吗? =|

标签: javascript jquery jquery-ui mobile jquery-plugins


【解决方案1】:

从您提供的文档中,我能够找出一个突出显示所有单词并允许单词循环的实现。大体上变化如下:

  1. 创建一个名为 offsets 的数组来跟踪突出显示单词的当前“顶部偏移量”。这是从容器顶部到突出显示的单词的距离度量。

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

    var m = $('mark[data-markjs]');
    
    offsets = [];
    
    for (var i = 0; i < m.length; i++)
        offsets.push($(m[i]).offset().top);
    }
    
  3. 将您的“keyup”事件处理程序更改为以下实现:

    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);
    
  4. 最后,在你的函数结束时,调用

    $("input[name='keyword']").on("keyup", mark);
    $("input[type='checkbox']").on("change", mark);
    

Working Fiddle

【讨论】:

  • 他们没有丰富的文档,但是有一部分在谈论高亮: 4.1 mark() 一种高亮自定义搜索词的方法。 markjs.io
  • Fiddle 这样更好吗?告诉我,我会改变答案。
  • 是的。好多了,现在所有结果都显示出来了。但看起来滚动条有一个错误。如果您键入 1 并使用 enter 重复搜索,您会注意到在重复搜索之后出现问题,在页面顶部。
  • Fiddle。这是我目前能做的最好的。从某种意义上说,它仅在搜索完成时才计算单词偏移量,因此效率更高。它将这些偏移存储在数组 offsets 中,并解析键输入以将 arrowOffsets 更改为当前偏移值。它适用于输入、向上和向下箭头。
  • 请把你的答案换成最新的小提琴,我会把它标记为最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2020-06-24
  • 2012-02-06
  • 2021-09-30
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多