1.Bootstrap是什么?
    一个用于快u开发web应用程序和网站的前端框架。Bootstrap是基于HTML、CSS、JAVASCRIPT 。
    给我使用的感觉是对于掌握一般的前端知识就可以学会怎么去使用Bootstrap,它包含了功能强大的内置组件,易于定制,最重要的是它是开源的。
   工作中用到是Bootstrap3,学习在线文档https://v3.bootcss.com/
2.如何使用
可以选择在官网下载该文件包,或者使用在线工具库,但是要注意,在线的地址有可能会失效,有一次布局没了觉得很奇怪,查看页面代码发现我继承别人代码全部使用在线的工具库,瞬间心凉凉。为了保险起见还是自己下载个安心些。
注意: Bootstrap插件全部依赖jQuery,必须在Bootstrap之前引入。
3.如何使用它来布局
作为一个前端不是特别好的开发,我用了Bootstrap可视化布局,个人感觉还不错。组件只要拖拽自己想要的样子就可以。https://www.runoob.com/try/bootstrap/layoutit/
通过定义容器的大小,平分为12份(也有24份,23份的,取12份是一打,表示进阶完美的意思),再调整内外边距,最后结合媒体查询,制作出了强大的响应式网格系统。(可以通过重新编译LESS码源来修改12这个数值)。
1.数据行(.row)必须包含在容器(.container)中,以便赋予合适的对其方式和内边距(padding)。
2.在行(.row)中可以添加列(.column),但列数之和不能超过平分的总列数,比如:12.
3.通过设置内边距(padding)从而创建列于列之间的间距。然后通过为第一列和最后一列设置负值的外距(margin)来抵消内距(padding)的影响。
4.不希望相邻的两个列紧靠近在一起,就用offset功能来实现。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | <!DOCTYPE html><html lang="zh-CN">
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 
 <title>Bootstrap Template</title>
 
 
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
 
 
 
 
 
 
 
 </head>
 <body>
 <div class="container">
 <div class="row clearfix">
 <div class="col-md-12 column">
 <h3>
 h3. 这是一套可视化布局系统.
 </h3>
 </div>
 </div>
 </div>
 
 
 <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
 
 <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
 </body>
 </html>
 
 | 
4.多种插件的应用
4.1 Bootstrap-treeView 树形菜单的实际操作总结
1、资源引用
<``script src="bootstrap-treeview.js">script``>`
2、在一个dom元素绑定该组件
<``div id="treeview1">div><br``>`
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | $('#treeview1').treeview({data: getTree(),
 levels: 5,
 color: "#000",
 backColor: "#fff",
 onhoverColor: "orange",
 borderColor: "red",
 showBorder: false,
 showTags: true,
 
 highlightSelected: true,
 selectedColor: "#fff",
 selectedBackColor: "darkorange",
 });
 
 | 
代码截取
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 
 | **初始化数据$('#treeview1').treeview('collapseAll', {
 data : treedata,
 silent : false
 });
 **清空搜索选项**
 $('#treeview1').treeview('clearSearch');
 **查询功能
 var search = function(e) {
 var result;
 
 var pattern = $.trim($('#input-search').val());
 console.log(pattern)
 
 
 
 
 
 
 
 var reg=/^[1-9]\d*$|^0$/;
 if(reg.test(pattern)){
 window.alert("搜索内容不可以为纯数字");
 $('#input-search').val("");
 clear();
 }else{
 var options = {
 ignoreCase: true,
 exactMatch: false,
 revealResults: true
 };
 
 var results = $('#treeview1').treeview('search', [ pattern, options ]);
 
 $.each(results, function (index, result) {
 console.log(result)
 result.text += '<p>- <span style="color:red;">' + result.text + '</span></p>';
 
 });
 
 
 
 }
 };
 
 | 
对treeview组件的操作参考:
bootstrap treeview树形菜单 动态扩展 连数据库 - 愿生命从容 - 博客园https://www.cnblogs.com/chenhtblog/p/8342534.htmlbootstrap-treeview 扩展addNode方法 动态添加子节点的方法 - CSDN博客https://blog.csdn.net/qq_25628235/article/details/51719917bootstrap treeview 增删改的正确姿势 - CSDN博客https://blog.csdn.net/hotqin888/article/details/54798737/
html页面使用该插件上传图片并显示在轮播图中
| 12
 3
 
 | <div class="modal-body" style="height:80%; overflow-y:scroll;"><input id="input-b5" name="input-b5" type="file" multiple>
 </div>
 
 | 
JavaScript:删除图片必须要配置的两个属性initialPreview和initialPreviewConfig
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 
 | function init(){$("#input-b5").fileinput({
 'theme': 'fa',
 showCaption:true,
 showPreview :true,
 overwriteInitial: false,
 validateInitialCount: true,
 initialPreview:array,--->预览时可以看到
 language: 'zh',
 uploadExtraData:{pictitle:JSON.stringify(jsonstr)},
 'uploadUrl': '/FileUpload',
 uploadAsync: false,
 allowedFileExtensions: ['png', 'jpg','gif'],
 hideThumbnailContent:true,
 layoutTemplates :{
 
 actionUpload:'',
 
 },
 initialPreviewConfig:con,---->预览时可以看到
 })
 }
 配置动态数据需要添加一个函数:
 function getImg(dat){
 ........
 return array,con;
 }
 
 function setimg(dat){
 }
 删除时添加的两个函数:
 $('#input-b5').on('filebeforedelete', function() {
 return new Promise(function(resolve, reject) {
 $.confirm({
 title: '警告!',
 content: '你是否想要删除这个图片?',
 type: 'red',
 buttons: {
 确定: {
 btnClass: 'btn-primary text-white',
 keys: ['enter'],
 action: function(){
 resolve();
 }
 },
 取消: function(){
 $.alert('图片删除被中止! ');
 }
 }
 });
 });
 })
 $('#input-b5').on('filedeleted', function( event,index ,data,val) {
 if(data.status==200){
 var picimg=val.picimg;
 var a=JSON.parse(picimg).arrs.split("#");
 var b="";
 for(var i=0;i<a.length;i++){
 if(a[i]==JSON.parse(picimg).obj){
 b+="";
 }else{
 b+=a[i]+"#";
 }
 }
 if(b==""){
 
 }else {
 b=b.substring(0,b.length-1);
 }
 
 setimg(b);
 getImg(b);
 init();
 $('#myModal').modal('hide');
 $("#strong").html("图片删除成功");
 $('#strong').removeClass("hidden");
 window.setTimeout(function() {
 $('#strong').addClass("hidden");
 }, 2000);
 }else{
 $("#strong").html("图片删除异常");
 $('#strong').removeClass("hidden");
 window.setTimeout(function() {
 $('#strong').addClass("hidden");
 }, 2000);
 }
 });
 
 | 
后端代码
文件上传代码略,基于公司需求增加了删除图片的功能,在前端js函数获取要删除的图片的信息,在后端添加一个删除图片的对应方法。