一直苦於沒有好的國籍控件可以用,於是抽空寫了一個國籍控件,現分享給大家。
主要功能與介面介紹
國籍控制主要支援中文、英文過濾以及鍵盤上下事件。
源碼介紹
國籍控制核心是兩個文件,navtionality.js 和 mian.css。 navtionality.js主要功能是國籍控制的DOM建置以及對應的事件綁定;main.css主要是用於渲染國籍控制項的樣式。而main.js是國籍控制項的呼叫方法。
HTML結構
國籍控制項要呈現在頁面上,必須事先在頁面中加以設定以供控制項載入使用。 control-nationality-suggest 是容器,input 是輸入接收,nationality-suggest-list-container是提示列表,用於顯示篩選後的國籍列表。
navtionality.js 介紹
navtionality是國籍控制的核心,主要負責國籍控制的資料過濾,DOM呈現以及對應的事件綁定。 init是整個控制項的入口,透過傳入的option參數,來決定特定的綁定物件。
var nationality = {
data:[]
strData: String,
input: Object,
list: Object,
//功能說明:初始化
init: function (option) {
},
//功能說明:選項設定
setOption: function (option) {
},
//功能說明:綁定事件
setEvent: function () {
},
//功能描述:綁定資料
setData: function () {
},
//功能說明:搜尋
doSearch: function (key) {
},
//功能說明:設定清單
setList: function (fvalue) {
},
//功能說明:綁定清單事件
setListEvent: function () {
},
//功能說明:設定單項值
setValue: function (item, hide) {
},
//功能說明:校驗資料
chkValue: function () {
},
//功能說明:滑鼠事件
setKeyDownEvent: function (event) {
}
}
快速搜尋介紹
在整個國籍控制中,搜尋是最重要的一塊,如何根據使用者的輸入篩選出對應的國籍資料。我們採取的方法是透過正規匹配法,我們把國籍資料先進行格式化處理
例如原始的國籍資料是這樣的:[{ id: "CN", en: "China", cn: "中國大陸" }, { id: "HK", en: "Hong Kong", cn: "中國香港" }, { id: "MO", en: "Macau", cn: "中國澳門" }
那我們格式化後的資料就是這樣的:#CN|China|中國大陸##HK|Hong Kong|中國香港##MO|Macau|中國澳門##
為什麼要這麼處理呢?是因為我們要藉助正規表達式來實現資料的快速匹配。
//功能說明:搜尋
doSearch: function (key) {
if (!key || key == "") return ["CN|China|中國大陸", "HK|Hong Kong|中國香港", "MO|Macau|中國澳門", "TW|Taiwan|中國台灣" ];
var reg = new RegExp("#[^#]*?" key "[^#]*?#", "gi");
return this.strData.match(reg);
}
想必大家看到我們的正規匹配,應該明白一大半了,沒錯,我們透過將原先的數組轉換成字串的方式,利用正則快速實現數據的篩選過濾。
對比下我們透過遍歷實現的搜尋方式,可以發現正規的效率會高很多。
//功能說明:搜尋
doSearch: function (key) {
if (!key || key == "") return ["CN|China|中國大陸", "HK|Hong Kong|中國香港", "MO|Macau|中國澳門", "TW|Taiwan|中國台灣" ];
var search = [];
for(var i=0; i if(this.data[i].id.indexOf(key) >= 0 || this.data[i].en.indexOf(key) >= 0 || this.data[i].cn.indexOf(key ) >= 0){
search.push(this.data[i]);
}
}
return search;
}
main.js 介紹
main是呼叫國籍控制的方法,透過遍歷頁面中的calss為control-nationality-suggest的DOM物件來綁定國籍控制。
$(".control-nationality-suggest").each(function () {
var input = $(this).find(".nationality-suggest-input");
var list = $(this).find(".nationality-suggest-list");
new nationality({ input: input, list: list });
})
示範與下載

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器