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. 还有跨域的解决方案

一个@功能实现起来很简单,就比如上图中的代码, 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;

            }

        }

    }

});

[email protected]功能后端实现

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

时间: 2024-10-10 17:06:21

At.js:一个Twitter/微博样式的@自动完成插件的相关文章

js实用表单模糊搜索和自动提示插件

fuzzysearch是一款实用的表单模糊搜索和自动提示js插件.该js插件允许你只输入部分字符串,根据这部分字符串自动搜索和匹配,并给出自动替代选项.适用于各种数据的快速检索. 在线演示:http://www.htmleaf.com/Demo/201503081485.html 下载地址:http://www.htmleaf.com/jQuery/Form/201503081484.html

Reveal.js一个用来做WEB演示文稿的框架

reveal.js是一个能够帮助我们很轻易地使用HTML来创建漂亮的演示效果,也就是我们常见的PPT幻灯片.reveal.js不依赖其他任何javascript库,是一个独立的javascript插件库.它提供了多种幻灯片过渡效果,是一个非常棒的在线演示库. reveal.js还拥有许多高级特性,完整安装,某些 reveal.js 的功能,像外部的Markdown和演讲注释,需要演示文稿运行在本地的一个web服务器上,因此需要在nodejs环境下运行,安装node.js以及grunt,稍微比较复

js弹框3秒后自动消失

开发中有时候会需要最出弹框后,过几秒自动消失的效果,下面给大家分享一下我自己做的一个小案例. 案例中的弹框使用的是bootstrap里面的模态框,实现自动消失则用的是js中的setInterval方法.该弹框使用了jquery-ui中的draggable方法,可拖动. 目录结构如下: 下面是案例代码: demo.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti

给所有浏览器的元素设置了一个共同的样式:Normalize.css

使用Normalize.css重置默认样式 CSS重置有助于根据所有设置的样式建立一个基准样式.样式重置有效重写了浏览器某些元素(在浏览器里有很大的不同)默认的样式. 尽管CSS resets在过去的几年里很受欢迎,但是,很多网站至今也没有使用,这些网站CSS的可扩展性因css resets会有很大的困难. 大多数人推荐使用normalize.css重置默认样式,而不是使用由Eric Meyer写的非常流行的CSS Reset或者自己写的Reset.Normalize.css给所有浏览器的元素设

JS获取内联样式

JS获取内联样式 //获取内联样式 function getCss(obj,attr){//obj:对象,name:style属性 if(obj.currentStyle) { return obj.currentStyle[attr]; } else { return document.defaultView.getComputedStyle(obj,null)[attr]; } } 大家都知道,用document.getElementById(‘element').style.xxx可以获取

改写js原装的alert样式

1.将下面的js代码单独到一个js文件中,然后在页面中引用 AlertDialog.js //改写js原装的alert样式 var t; var timeclose = 0; var showBackTime = 0; var showTime; window.alert = function (s, a, b, c) { if (s.indexOf("操作失败:[object Object]") >= 0) { return; } if (s == "out"

Sale.js——快速创建促销样式

小菜编写的又一款jQuery小插件,有兴趣的朋友可以试试~ 简介: 对于一个用于产品展示.销售的网站而言,很可能需要一种促销的特效. 一般而言,我们会在商品图片前加一个促销栏,写上一些促销标语.原价.折扣价等. 如果您的网站比较旧,或者您的新网站没有考虑这个功能,那么后期再加的话,可能需要费一番心思. Sale.js正是为此而生,她可以轻松的帮您添加促销样式,只需要您做很少的事情. 特性: Sale.js依赖jQuery,以jQuery插件的形式封装. Sale.js可以在任意块级元素上添加促销

用JS查看修改CSS样式(cssText,attribute(&#39;style&#39;),currentStyle,getComputedStyle)

CSS样式定义方法 大家都知道,在为HTML设置样式的时候,通常有三种方法:内联样式,内部样式表,外部样式表. 1.内联样式: 内联样式表就是在HTML元素中的行内直接添加style属性. 1 <div id="div1" style="width: 100px; height: 100px; background: black"> 2 </div> 2.内部.外部样式表: 内部样式表就是在<head>头部里有<style&

iOS开发实践:一个完整微博客户端的实现

本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序代码中的标识符,其它字段具体描述它在线程中被如何使用,以及它所依赖的其它元素,数据字典中各个标识符基本上也是按照线程的执行流程来排序. 数据流图是一个平面拓扑结构,每个节点或者是外部数据,或者是可被线程执行的代码模块.从外部数据到代码模块的边意味着线程在执行代码模块的时候需要用到外部数据,从代码模块