级联选择框是一种独特的选择机制,对于从大列表中选择项目特别有用。Cascader是一个实现此功能的jQuery插件。
这个jQuery插件从JS对象数组中生成一个用户友好的多列级联下拉列表,并允许您将其附加到文档中的任何文本字段。灵感来自Element UI和Ant Design的Cascader组件。
1.在文档中加载jQuery库和Cascader插件的文件。
- <link rel="stylesheet" href="/path/to/cascader.css" />
- <script src="/path/to/cdn/jquery.slim.min.js"></script>
- <script src="/path/to/cascader.js"></script>
2.在JS对象数组中准备数据,如下所示:
- // languages.js
- var languages = [
- {
- "indexcode": "1",
- "name": "Front-End",
- "s": [
- {
- "indexcode": "11",
- "name": "HTML",
- "s": [
- {
- "indexcode": "111",
- "name": "HTML"
- },
- {
- "indexcode": "112",
- "name": "XML"
- },
- {
- "indexcode": "113",
- "name": "HTML5"
- },
- ]
- },
- {
- "indexcode": "12",
- "name": "CSS",
- "s": [
- {
- "indexcode": "121",
- "name": "CSS"
- },
- {
- "indexcode": "122",
- "name": "CSS3"
- },
- {
- "indexcode": "123",
- "name": "CSS4"
- },
- ]
- },
- {
- "indexcode": "13",
- "name": "JavaScript",
- "s": [
- {
- "indexcode": "131",
- "name": "jQuery"
- },
- {
- "indexcode": "122",
- "name": "Angular"
- },
- {
- "indexcode": "123",
- "name": "React"
- },
- ]
- },
- ]
- },
- {
- "indexcode": "2",
- "name": "Back-End",
- "s": [
- {
- "indexcode": "21",
- "name": "C",
- "s": [
- {
- "indexcode": "211",
- "name": "C"
- },
- {
- "indexcode": "212",
- "name": "C++"
- },
- {
- "indexcode": "213",
- "name": "C#"
- },
- ]
- },
- {
- "indexcode": "22",
- "name": "Database",
- "s": [
- {
- "indexcode": "221",
- "name": "MySql"
- },
- {
- "indexcode": "222",
- "name": "SQL"
- },
- {
- "indexcode": "223",
- "name": "Oracle"
- },
- ]
- },
- {
- "indexcode": "23",
- "name": "Others",
- "s": [
- {
- "indexcode": "231",
- "name": "Node.js"
- },
- {
- "indexcode": "122",
- "name": "Python"
- },
- {
- "indexcode": "123",
- "name": "Ruby"
- },
- ]
- },
- ]
- }
- ]
3.导入数据JavaScript。
- <script src="./languages.js"></script>
4.生成一个级联下拉列表,并将其附加到一个输入字段。
- <input type="text" id="test"/>
- // parse data
- languages.forEach(function(item){
- item.label = item.name
- item.value = item.indexcode
- item.children = item.s
- item.s.forEach(function(item2){
- item2.label = item2.name
- item2.value = item2.indexcode
- if (item2.s && item2.s.length) {
- item2.children = item2.s
- item2.s.forEach(function(item3){
- item3.label = item3.name
- item3.value = item3.indexcode
- })
- }
- })
- })
- // initialize
- $('#test').zdCascader({
- data: languages,
- container: '#test',
- onChange: function(value, label, datas){
- console.log(value, label, datas);
- }
- });