TaggingJS 基于 jQuery 标签添加删除管理插件

发布于 2020-04-03 11:45:11 字数 16136 浏览 1219 评论 0

TaggingJS 是一个 jQuery 插件,用于创建一个用户可自定义的标签功能,现在很多文章发布类的网站都有这个功能,WordPress 也有这样的功能,添加和删除标签都非常的方便。

这款插件不到3KB ,支持主流浏览器。有几种方法来定制 TaggingJS 的默认行为,一是使用  custom_options 定制全局的 TaggingJS 行为,二是给标签框加上 data 属性,三是结合前面两种方式。

开始使用

最简单

  1. 下载这个 tagging.min.js 存储库中的文件
  2. 包括 <script src="path/to/tagging.min.js"></script> 在你的页面底部
  3. 包括基本CSS标记样式 <link href="tag-basic-style.css" rel="stylesheet"><head> 你的网页
  4. 到您的页面,类似于 <div data-tags-input-name="tag" id="tagBox">preexisting-tag</div>
  5. 到您的主 JavaScript 文件 $("#tagBox").tagging();

这个 data-tags-input-name="tag" 是 name 属性中的每个输入使用的 tagBox.

使用方法操作标记

这里有一些共同模式若要操作标记框内的标记,请执行以下操作:

N.B.$tag_box 是标记框对象。为了得到它:

var t, $tag_box;

// We call taggingJS init on all "#tag" divs
t = $( "#tag" ).tagging();

// This is the $tag_box object of the first captured div
$tag_box = t[0];

获取所有标记(对象)

// To get all tags inside tag box as an array of String
$tag_box.tagging( "getTags" );
>>> ["preexisting-tag", "another-tag"]

// To get all tags inside tag box as an array of jQuery Object
$tag_box.tagging( "getTagsObj" );
>>> [x.fn.x.init[1], x.fn.x.init[1]]

添加新标签

// To add a tag with "A new tag added via JS" as text
$tag_box.tagging( "add", "A new tag added via JS" );
>>> true

// To add two tag, one with "tag 1" and the other with "tag 2" as text
$tag_box.tagging( "add", ["tag 1", "tag 2"] );
>>> ["tag 1", "tag 2"]

移除标签

// To remove a tag with text "A new tag added via JS" as text
$tag_box.tagging( "remove", "A new tag added via JS" );
>>> $_obj

// To remove two tag, one with "tag 1" and the other with "tag 2" as text
$tag_box.tagging( "remove", ["tag 1", "tag 2"] );
>>> [$_obj]

// Suppose that $tag is the jQuerify object of a tag inside the tag box, you can also do
$tag_box.tagging( "remove", $tag] );
>>> $_obj

删除所有标签

// To remove all tags
$tag_box.tagging( "removeAll" );

// or
$tag_box.tagging( "reset" );

获得特殊钥匙

// To get special Keys without distinctions
$tag_box.tagging( "getSpecialKeys" );
>>> Object {comma: 188, enter: 13, spacebar: 32, del: 46, backspace: 8}

// To get special Keys with distinctions
$tag_box.tagging( "getSpecialKeysD" );
>>> Object {add: Object, remove: Object}

添加或移除特殊键

// To add the "left arrow" as a special key to add a new tag
$tag_box.tagging( "addSpecialKeys", [ "add", { left_arrow: 37 } ] );

// To add the "right arrow" as a special key to remove a tag
$tag_box.tagging( "addSpecialKeys", [ "remove", { right_arrow: 39 } ] );

// To remove the "right arrow" as a special key
$tag_box.tagging( "removeSpecialKeys", ["remove", 39] );

禁用 TaggingJS

// To disable taggingJS
$tag_box.tagging( "destroy" );

清空 type_zone

// To disable taggingJS
$tag_box.tagging( "emptyInput" );

获取或设置 type_zone

// To set "value" as value of the input
$tag_box.tagging( "valInput", "value" );

// To get the value of the input
$tag_box.tagging( "valInput" );

触发焦点事件 type_zone

// To Trigger Focus event the input
$tag_box.tagging( "focusInput" );

检测添加或删除标记的时间

// Execute callback when a tag is added
$tag_box.on( "add:after", function ( el, text, tagging ) {
  console.log( "Added tag: ", text );
});

// Execute callback when a tag is removed
$tag_box.on( "remove:after", function ( el, text, tagging ) {
  console.log( "Removed tag: ", text );
});

自定义

确实有几种方式要自定义 taggingJS 的默认行为:

  1. 使用JavaScript custom_options 对象来自定义全局taggingJS行为
  2. 使用 data 属性中的属性。tagBox HTML标记
  3. 使用前两种方式的组合

data 属性具有比 custom_options 对象优先级高,因为每个 data 属性覆盖全局行为。换句话说,全局设置适用于捕获的所有标记框,除非在这些框中指定了 data 属性,这可能会改变你的行为。

第一条路-全局对象

  1. 创建自定义选项 object,就像这样 my_custom_options
    var my_custom_options = {
    	"no-duplicate": true,
    	"no-duplicate-callback": window.alert,
    	"no-duplicate-text": "Duplicate tags",
    	"type-zone-class": "type-zone",
    	"tag-box-class": "tagging",
    	"forbidden-chars": [",", ".", "_", "?"]
    };
  2. 创建标记框或多个标签框如下:
    <div id="tagBox">preexisting-tag</div>
  3. 到您的主 JavaScript 文件:
    $("#tagBox").tagging( my_custom_options );

通过这种方式,我们自定义了全局行为全标签盒被选择者抓住了。

第二种方式-数据属性

  1. 创建标记框和一些 data 属性,如下所示
    <div
    	data-no-duplicate="true"
    	data-pre-tags-separator="\n"
    	data-no-duplicate-text="Duplicate tags"
    	data-type-zone-class="type-zone"
    	data-tag-box-class="tagging"
    	data-edit-on-delete="true"
    id="tagBox">preexisting-tag</div>
  2. 到您的主JavaScript文件:
    $("#tagBox").tagging();

使用数据方法与 no-duplicate-callback 和 forbidden-chars 会引起一些问题。避开它。

第三种方式-混合方式

这样,我们混和数据属性和选项对象,用于自定义每个标记框的 taggingJS 行为。

  1. 创建标记框和一些data属性,如下所示:
    <div class="tag-box"
    	data-no-duplicate="true"
    	data-tags-input-name="tag"
    id="tagBox1">preexisting-tag</div>
  2. 创造另一个标签盒没有data属性:
    <div id="tagBox1" class="tag-box">preexisting-tag</div>
  3. 创建自定义选项 object,就像这样my_custom_options
    var my_custom_options = {
    	"no-duplicate": false,
    	"tags-input-name": "taggone",
    	"edit-on-delete": false,
    };
  4. 到您的主JavaScript文件
    $(".tag-box").tagging( my_custom_options );

现在你可以看到:

  • 这个#tagBox1有一种行为可以覆盖my_custom_options备选方案:
    • 不接受重复标记(分别data属性);
    • 对于每个标记,它都有tag作为输入名称(分别data属性);
    • 在删除时,标记将被完全删除(my_custom_options);
  • 这个#tagBox2只有由my_custom_options:
    • 接受重复标签(my_custom_options);
    • 对于每个标记,它都有tag作为输入名称(my_custom_options);
    • 在删除时,标记将被完全删除(my_custom_options);

可选参数

下面是定制 taggingJS 的可用选项带着 type,一个小的描述和默认值:

参数类型默认值描述
case-sensitiveBooleanfalse如果false,所有文本都被视为小写。
close-charString"×"单标签关闭字符。
close-classString"tag-i"单标签关闭类。
edit-on-deleteBooleantruetrue若要编辑刚刚从标记框中删除的标记,请执行以下操作。
forbidden-charsArray["," , ".", "_", "?"]禁止字符数组。
forbidden-chars-callbackFunctionwindow.alert函数在检测到禁止字符时调用。
forbidden-chars-textString"Forbidden character:"传递给forbidden-chars-callback.
forbidden-wordsArray[]一连串的禁止词。
forbidden-words-callbackFunctionwindow.alert函数在检测到禁止字时调用。
forbidden-words-textString"Forbidden word:"传递给forbidden-words-callback.
no-backspaceBooleanfalse默认情况下,Backspace键移除最后一个标记,true为了避免这种情况。
no-commaBooleanfalse逗号","键默认添加一个新标记,true为了避免这种情况。
no-delBooleanfalse默认情况下,DELKEY删除最后一个标记,true为了避免这种情况。
no-duplicateBooleantrue如果true,标签框中将没有重复标签的名称。
no-duplicate-callbackFunctionwindow.alert函数在检测到重复标记时调用。
no-duplicate-textString"Duplicate tag:"传递给no-duplicate-callback.
no-enterBooleanfalse输入键添加一个新标签在默认情况下,true为了避免这种情况。
no-spacebarBooleanfalse空格键默认添加一个新标记。true为了避免这种情况。
pre-tags-separatorString", "这是用来split初始文本并添加preexistint-tag。默认情况下,必须使用逗号和空格放置新标记(", ").
tag-box-classString"tagging"标签框的类。
tag-box-editable-classString"editable"可编辑时标记框的类,与标记一起使用-CSS目标的限制选项。
tag-charString"#"单标签炭
tag-classString"tag"单标签类。
tag-on-blurBooleantrue如果true,从$type_zone将添加一个新标记。
tags-input-nameString"tag"要使用的名称name=""在单个标签的输入中。默认情况下,所有作为数组传递的标记如下tag[].
tags-limitInteger0限制可以添加的标记数,零表示无限制。
type-zone-classString"type-zone"类型区域的.

可用方法

下面是TaggingJS的可用方法用一点描述,它可以接受的论点和返回type:

方法描述参数返回值
add( text or [text] )添加一个新标签。String(或ArrayString)添加为标记,如果null我们得到标签框的内容type_zone.BooleanFuntion
add:after( function )在添加标记后执行函数。取决于function用作回调。Generic
addSpecialKeys( [ "type", obj ] )添加特殊键以添加或删除标记。Array-何处"type""add""remove"obj就像{ key_name: key_code }(它也可以是Arrayobj).String因错误或Object其实"type"_key (add_keyremove_key).
destroy()移除type_zone所有的标签和其他东西。voidBoolean
emptyInput()空标签盒type_zone.void$_obj-质疑type_zone本身。
FocusInput()触发标记框上的焦点type_zone.void$_obj-质疑type_zone本身。
getDataOptions()获取数据属性自定义选项。voidObject-标签框数据属性自定义选项。
getSpecialKeys()返回对象内的所有特殊键(不加区别)voidObject-作为字符串成员的所有标记。
getSpecialKeysD()返回对象内的所有特殊键(区别)voidObject带着addremove财产。
getTagsObj()作为对象返回所有标记voidArray-作为对象成员的所有标记。
init()引导所有事物的init方法void$_obj-jquerify标签框
refresh( text )删除并插入所有标记String将所有标记分隔为pre-tags-separator选项值(如果null,我们打电话getTags方法)Boolean
remove( text or $_obj )移除最后一个标签或标签框中指定的标签type_zone.String$_obj(或Array)要移除的标签。String带有错误信息或$_obj去掉的标签。
remove:after( function )删除标记后执行函数。取决于function用作回调。Generic
RemoveAll()复位别名voidArray-所有已删除的标签。
removeSpecialKeys( [ "type", obj ] )取下一个特殊的钥匙。Array-何处"type""add""remove"obj就像{ key_name: key_code }(它也可以是Arrayobj).Object-实际上"type"_key(add_keyremove_key).
reset()从标签框中移除所有标签type_zonevoidArray-所有已删除的标签。
valInput(text )获取或设置标记框type_zone‘’.‘’值String放入标签框type_zone价值。价值String$_obj标签盒的type_zone.

你可以找到例子 这里

依赖性

  • jQuery  1.5.X 或者更高版本 2.X

浏览器支持

支持世界上所有主要的浏览器 IE 6+Mozilla Firefox 1+Google Chrome 1+Safari 5.1+

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

束缚m

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

α

文章 0 评论 0

一口甜

文章 0 评论 0

厌味

文章 0 评论 0

转身泪倾城

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文