zoukankan      html  css  js  c++  java
  • At.js:一个Twitter/微博样式的@自动完成插件

    At.js 是一个Twitter / Weibo样式的@自动完成插件。Demo演示(演示地址jQuery引入失效,导致演示失败)。

    功能特性:

    • 可以监听任何字符,不仅仅只是’@‘,可以设置监听不同的字符和使用不同的数据。
    • 支持同时使用静态数据和动态数据(通过AJAX),静态数据会被优先使用,然后再用AJAX加载找不到的值。
    • 可以给多个文本框设置监听事件。
    • 内置缓存支持。
    • 可以使用模板设置数据的显示格式。
    • 鼠标/键盘控制:Tab或Enter键选择,Up和Down键上下导航。

    jQuery版本要求: 1.7.0+

    项目主页:https://github.com/ichord/At.js

    为什么说这个插件好呢?代码简单好用,兼容性还不错,而且功能强大

    1. 可以自己定义各种符号作为触发条件,比如demo中:可以触发emoji表情  方便后期需求扩充

    2. 可以自己定义匹配规则,正则表达式可以自己定义

    3. 从demo上看可以在@内容中显示头像什么的,交互ui都不错,键盘操作也都支持

    4. 还有跨域的解决方案

    使用方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <link href="css/jquery.atwho.css" rel="stylesheet">
    <script src="http://code.jquery.com/jquery.js"></script>
    <script src="js/jquery.caret.js"></script>
    <script src="js/jquery.atwho.js"></script>
    $('#inputor').atwho({
        at: "@",
        data:['Peter', 'Tom', 'Anne']
    })
     

    一个@功能实现起来很简单,就比如上图中的代码, names作为数据源,当然也可以变成接口返回数据

    只用把data:names 变成url,返回json数据就行(json数据中的字段对应tpl的字段)

    然后给页面中的textarea绑定atwho就行

    友情提示1:

    下载的demo中,发现数据中有中文,但是@只能联想到英文,不能联想到中文

    解决方法:head中添加 <meta charset="UTF-8">

    友情提示2:

    At.js 需要依赖于Caret.js这个插件,这个插件是用来定位的,在文本域输入时,在哪里输入就在那个出现提示框

    友情提示3:

    插件的默认配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $.fn.atwho["default"] = {
      at: void 0,
      alias: void 0,
      data: null,
      tpl: "<li data-value='${atwho-at}${name}'>${name}</li>",
      insert_tpl: "<span id='${id}'>${atwho-data-value}</span>",
      callbacks: DEFAULT_CALLBACKS,
      search_key: "name",
      suffix: void 0,
      hide_without_suffix: false,
      start_with_space: true,
      highlight_first: true,
      limit: 5,
      max_len: 20,
      display_timeout: 300,
      delay: null
    };

    注释如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*可以定义规则*/
    var at_config = {
        at: "@",    /*触发的条件*/
        data: "user.json",  /*数据来源 返回json数据*/
        tpl: "<li data-value='@${name}'>${name}[${title}]</li>",  /*选择前显示 ${json中的key}  选择后为data-value的值*/
        search_key: "name",    /*定义匹配字段*/
        start_with_space: false,    /*是否必须有空格后才能触发*/
        limit: 10,  /*显示记录条数*/
        max_len: 20,
        display_timeout: 300,
        delay: null
    }

    可以通过覆盖默认值,定义匹配规则,比如定义显示数据的方式在tpl中配置

    serch_key对应tpl中的字段,比如是否空格后才触发,可以通过配置简单实现

     

    友情提示4:

    插件默认使用的占位符是${},这个和jsp中的el表达式功能冲突,所以在jsp页面使用插件时

    要么禁用el表达式(不推荐),要么就是把js变为一个js文件去引用,就解决了

    友情提示5:

    自定义正则表达式匹配规则,加上callbacks方法,不用修改源代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*可以自定义匹配规则*/
    $('#inputor').atwho({
        at: "@",
        callbacks: {
            matcher: function (flag, subtext) {
                var match, regexp, _a, _y;
                flag = flag.replace(/[-[]/{}()*+?.\^$|]/g, "\$&");
                _a = decodeURI("%C3%80");
                _y = decodeURI("%C3%BF");
                regexp = new RegExp("" + flag + "([A-Za-z" + _a + "-" + _y + "0-9_+-]*)$|" + flag + "([^\x00-\xff]*)$"'gi');
                match = regexp.exec(subtext);
                if (match) {
                    return match[2] || match[1];
                else {
                    return null;
                }
            }
        }
    });

    2.@功能后端实现

    参考@红薯 的 OSCHINA @提到我 的处理代码,也不用考虑正则表达式的问题了,后台分分钟的事情啦

  • 相关阅读:
    CSRF 攻击原理及防护
    XSS 攻击原理及防护
    git 基础命令大全
    vue3.0 VS vue2.0
    Android eMMC Booting[wiki百科]
    Android Fastboot[wiki百科]
    Android View.onMeasure方法的理解[转]
    某android游戏逆向小记
    Android网络编程—同时上传参数和文件到服务器 [转载]
    apk自我保护的一种实现方式——运行时自篡改dalvik指令【转载】
  • 原文地址:https://www.cnblogs.com/hanfei-cn/p/4950380.html
Copyright © 2011-2022 走看看