【问题标题】:Materialize CSS Autocomplete sorting based on a specific word基于特定单词实现 CSS 自动完成排序
【发布时间】:2021-11-29 00:58:27
【问题描述】:

我将Materialize CSS Autocomplete 用于我的 Google Apps 脚本,并从我的 Google 通讯录中填充数据。我希望能够根据联系人姓名中的特定单词对联系人出现的顺序进行排序。例如,假设我有以下联系人:

  • 杰森·加西亚
  • 乔纳森·杰克逊 手机
  • 莫妮卡斯托克斯
  • Amy Wang 手机
  • 亚伦布里奇斯

我希望包含 Mobile 字样的联系人显示在列表顶部,其余按字母顺序显示:

  • Amy Wang 手机
  • 乔纳森·杰克逊 手机
  • 亚伦布里奇斯
  • 杰森·加西亚
  • 莫妮卡斯托克斯

为此,我一直在尝试使用 Materialize CSS 文档中的 sortFunction,但没有成功。我怎么能做到这样?

【问题讨论】:

  • 重组你的阵列。使用您需要的关键字创建一个新数组从原始数组中删除带有关键字的元素。并使用 unshift 或 splice 或 concur 合并两个数组。

标签: javascript html css google-apps-script materialize


【解决方案1】:

您可以通过检查它是否包含术语“移动”来对数组进行排序,见下文。这将首先返回所有包含“mobile”的内容,然后返回所有其他内容。

const arr = ["Tom Mobile", "Sam", "Jess Mobile"]
arr.sort( (el1) => {
   if(el1.search(/mobile/gi) == -1) return 1
   return -1
}))

但这是针对数组的,您不需要数组,因此该答案是一般性的而不是具体的。因此,我快速演示了您真正想要的内容:

  document.addEventListener('DOMContentLoaded', function() {
    const options = {
        data : {
        "Tom mobile" : null,
        "Thomas" : null,
        "Tim mobile" : null
      },
      sortFunction : sortBy
    }
    var elems = document.querySelectorAll('.autocomplete');
    var instances = M.Autocomplete.init(elems, options);
  });
  
  // Sort function for sorting autocomplete results
  // prioritize if text contains mobile
  function sortBy(a, b) {    
    return  b.indexOf("mobile") - a.indexOf("mobile");
  }

参考

【讨论】:

  • 感谢您的回复。你能具体说明我应该把这段代码放在哪里吗?这是一个基本的 Materialize CSS 自动完成初始化代码:$(document).ready(function(){$('input.autocomplete').autocomplete({data: {"Tom Mobile": null,"Sam": null,"Jess Mobile": 'https://placehold.it/250x250'},});});。据我了解,排序是由 Materialize sortFunction 定义的,但是将代码简单地复制/粘贴到 sortFunction 中并不能解决问题。
  • 嗨迈克尔,请看上面,我已经更新了答案以满足您的要求。如果有效,则将其标记为已完成。
  • 谢谢,但不幸的是,您更新的代码对我也不起作用-我想这与Materialize uses the sortFunction的方式有关
  • 奇怪,我试过并测试了它。一件事可能是,在我的示例中,我使用的是“移动”,而在您的示例中,您使用的是“移动”。由于indexOf() 区分大小写,我建议您再次尝试修改您的代码以适合您的情况。这意味着您应该尝试在上面的sortBy() 中将“mobile”更改为“Mobile”。
  • 我想通了。问题是我的完整数据中有一些非英文字符,这弄乱了排序功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多