基于Bootstrap的标签页组件bootstrap-tab

Bootstrap-table实现下拉框三级联动查询,分页,参数设置表格,以及分页显示。 1.Bootstrap-table的效果图如下: 2.添加boostrap的样式。可通过bootstrap官网下载。bootstrap-table页面布局样式: <link rel="stylesheet" href="../static/assets/css/bootstrap.min.css"> <link rel="stylesheet" href="https://un... 阅读详情

这里写图片描述

bootstrap-tab组件是对原生的bootstrap-tab组件的封装,方便开发者更方便地使用,主要包含以下功能:

  • tab页初始化
  • 关闭tab页
  • 新增tab
  • 显示tab页
  • 获取tab页ID

使用

Step1 :引入样式

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css">
<!--bootstrap-tab样式-->
<link rel="stylesheet" href="../css/bootstrap-tab.css">

Step2:引入脚本

<script src="jquery/jquery-1.8.3.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<script src="../js/bootstrap-tab.js"></script>

Step3:使用

<div id="tabContainer"></div>

<script>
    $("#tabContainer").tabs({
        data: [{
            id: 'home',
            text: '百度一下',
            url: "tab_first.html",
            closeable: true
        }, {
            id: 'admineap',
            text: 'AdminEAP',
            url: "tab_second.html"
        }, {
            id: 'edit',
            text: '编辑人员',
            url: "tab_content.html",
            closeable: true
        }],
        showIndex: 1,
        loadAll: false
    })

    $("#tabContainer").data("tabs").addTab({id: 'test', text: 'addTab', closeable: true, url: 'tab_content.html'})
</script>

参数和方法说明

参数说明

参数名称默认值可选值说明
datatab页数据来源(对象列表),包含id,text,url,closeable属性
id必须,单个tab的id
text必须,单个tab页的标题
url必须,单个tab页的内容url
closeableFalsetrue,false单个tab页是否可关闭
showIndex0默认显示页的索引
loadAllTruetrue,falsetrue=一次全部加在页面,false=只加在showIndex指定的页面,其他点击时加载,提高响应速度

方法说明

方法名称参数参数说明方法说明
inittab组件初始化入口方法
builderdatatab数据构建tab页的主方法
loadData加载tab页的内容,根据loadAll即时加载或者点击时加载
addTabobj单个tab的数据增加一个tab页
showTabtabIdtab的id根据id显示tab页
getCurrentTabId获取当前活动tab页的ID

bootstrap-tab.js

/**
 * Bootstrap tab组件封装
 * @created 2017/7/24
 *
 */
(function ($, window, document, undefined) {
    'use strict';

    var pluginName = 'tabs';

    //入口方法
    $.fn[pluginName] = function (options) {
        var self = $(this);
        if (this == null)
            return null;
        var data = this.data(pluginName);
        if (!data) {
            data = new BaseTab(this, options);
            self.data(pluginName, data);
        }
        return data;
    };


    var BaseTab = function (element, options) {
        this.$element = $(element);
        this.options = $.extend(true, {}, this.default, options);
        this.init();
    }

    //默认配置
    BaseTab.prototype.default = {
        showIndex: 0, //默认显示页索引
        loadAll: true,//true=一次全部加在页面,false=只加在showIndex指定的页面,其他点击时加载,提高响应速度

    }

    //结构模板
    BaseTab.prototype.template = {
        ul_nav: '<ul id="myTab"  class="nav nav-tabs"></ul>',
        ul_li: '<li><a href="#{0}" data-toggle="tab"><span>{1}</span></a></li>',
        ul_li_close: '<i class="fa fa-remove closeable" title="关闭"></i>',
        div_content: '<div  class="tab-content"></div>',
        div_content_panel: '<div class="tab-pane fade" id="{0}"></div>'
    }

    //初始化
    BaseTab.prototype.init = function () {
        if (!this.options.data || this.options.data.length == 0) {
            console.error("请指定tab页数据");
            return;
        }
        //当前显示的显示的页面是否超出索引
        if (this.options.showIndex < 0 || this.options.showIndex > this.options.data.length - 1) {
            console.error("showIndex超出了范围");
            //指定为默认值
            this.options.showIndex = this.default.showIndex;
        }
        //清除原来的tab页
        this.$element.html("");
        this.builder(this.options.data);
    }

    //使用模板搭建页面结构
    BaseTab.prototype.builder = function (data) {
        var ul_nav = $(this.template.ul_nav);
        var div_content = $(this.template.div_content);

        for (var i = 0; i < data.length; i++) {
            //nav-tab
            var ul_li = $(this.template.ul_li.format(data[i].id, data[i].text));
            //如果可关闭,插入关闭图标,并绑定关闭事件
            if (data[i].closeable) {
                var ul_li_close = $(this.template.ul_li_close);

                ul_li.find("a").append(ul_li_close);
                ul_li.find("a").append("&nbsp;");
            }

            ul_nav.append(ul_li);

            //div-content
            var div_content_panel = $(this.template.div_content_panel.format(data[i].id));


            div_content.append(div_content_panel);
        }

        this.$element.append(ul_nav);
        this.$element.append(div_content);
        this.loadData();

        this.$element.find(".nav-tabs li:eq(" + this.options.showIndex + ") a").tab("show");

    }

    BaseTab.prototype.loadData = function () {
        var self = this;

        //tab点击即加载事件
        //设置一个值,记录每个tab页是否加载过
        this.stateObj = {};
        var data = this.options.data;
        //如果是当前页或者配置了一次性全部加载,否则点击tab页时加载
        for (var i = 0; i < data.length; i++) {
            if (this.options.loadAll || this.options.showIndex == i) {
                if (data[i].url) {
                    $("#" + data[i].id).load(data[i].url,data[i].param);
                    this.stateObj[data[i].id] = true;
                } else {
                    console.error("id=" + data[i].id + "的tab页未指定url");
                    this.stateObj[data[i].id] = false;
                }
            } else {
                this.stateObj[data[i].id] = false;
                (function (id, url,paramter) {
                    self.$element.find(".nav-tabs a[href='#" + id + "']").on('show.bs.tab', function () {
                        if (!self.stateObj[id]) {
                            $("#" + id).load(url,paramter);
                            self.stateObj[id] = true;
                        }
                    });
                }(data[i].id, data[i].url, data[i].paramter))
            }
        }

        //关闭tab事件
        this.$element.find(".nav-tabs li a i.closeable").each(function (index, item) {
            $(item).click(function () {
                var href = $(this).parents("a").attr("href").substring(1);
                if(self.getCurrentTabId()==href){
                    self.$element.find(".nav-tabs li:eq(0) a").tab("show");
                }
                $(this).parents("li").remove();
                $("#" + href).remove();
            })
        });

    }

    //新增一个tab页
    BaseTab.prototype.addTab=function (obj) {
        var self=this;
        //nav-tab
        var ul_li = $(this.template.ul_li.format(obj.id, obj.text));
        //如果可关闭,插入关闭图标,并绑定关闭事件
        if (obj.closeable) {
            var ul_li_close = $(this.template.ul_li_close);

            ul_li.find("a").append(ul_li_close);
            ul_li.find("a").append("&nbsp;");
        }

        this.$element.find(".nav-tabs:eq(0)").append(ul_li);
        //div-content
        var div_content_panel = $(this.template.div_content_panel.format(obj.id));
        this.$element.find(".tab-content:eq(0)").append(div_content_panel);
        $("#" + obj.id).load(obj.url,obj.paramter);
        this.stateObj[obj.id] = true;

        if(obj.closeable){
            this.$element.find(".nav-tabs li a[href='#" + obj.id + "'] i.closeable").click(function () {
                var href = $(this).parents("a").attr("href").substring(1);
                if(self.getCurrentTabId()==href){
                    self.$element.find(".nav-tabs li:eq(0) a").tab("show");
                }
                $(this).parents("li").remove();
                $("#" + href).remove();

            })
        }

        this.$element.find(".nav-tabs a[href='#" + obj.id + "']").tab("show");
    }

    //根据id获取活动也标签名
    BaseTab.prototype.find=function (tabId) {
        return this.$element.find(".nav-tabs li a[href='#" + tabId + "']").text();
    }

    // 删除活动页
    BaseTab.prototype.remove=function (tabId) {
        var self=this;
        $("#" + tabId).remove();
        this.$element.find(".nav-tabs li a[href='#" + tabId + "']").parents("li").remove();
    }

    // 重新加载页面
    BaseTab.prototype.reload=function (obj) {
        var self=this;
        if(self.find(obj.id)!=null){
            $("#" + obj.id).remove();
            this.$element.find(".nav-tabs li a[href='#" + obj.id + "']").parents("li").remove();
            self.addTab(obj);
        }else{
            self.addTab(obj);
        }
    }

    //根据id设置活动tab页
    BaseTab.prototype.showTab=function (tabId) {
        this.$element.find(".nav-tabs li a[href='#" + tabId + "']").tab("show");
    }

    //获取当前活动tab页的ID
    BaseTab.prototype.getCurrentTabId=function () {
        var href=this.$element.find(".nav-tabs li.active a").attr("href");
        href=href.substring(1);
        return href;
    }


    String.prototype.format = function () {
        if (arguments.length == 0) return this;
        for (var s = this, i = 0; i < arguments.length; i++)
            s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
        return s;
    };
})(jQuery, window, document)
为Bootstrap标签页切换nav-tab组件添加 切换回调方法 - callback 效果 nav-tab标签切换后,js可以执行指定函数。 关键代码 <ul class="nav nav-tabs nav-justified" role="tablist"> <li role="presentation" class="active"> <a href="#tab1st" aria-controls="tab1st" role="tab" data-toggle="tab" data-target-go='AAA'> 阅读详情

相关推荐

BootStrap之——网站首页整体设计思路

整体架构一般而言首页设计几乎等同与整个网站设计,那么首页中到底应该放些什么内容才好呢?这要看网站有哪些主要的元素。本教程里要设计的网站首页是一个多用户博客类的网站首页,在该网站中用户可以发表博客,也可以推荐图书给其他用户。所以,首页中的板块包括这些应该是恰当的:1.整站导航条2.文章(博客)展示板块3.图书展示板块4.用户(会员)展示板块5.脚注——footer部分 其中导航条和脚注是整个网站中都要

艾夏SEO 1582

Bootstrap 导航元素( tab导航)标签页

1、基本的导航元素:标签导航。基于ul、li而来,给ul添加class="nav nav-tabs" 即可。选中的li添加class="active"即可。 <p>标签式的导航菜单</p> <ul class="nav nav-tabs"> <li class="active"><a href="#">Home</a></li> <li><a href="#">SVN</a&gt..

雪锋的笔记 7773

Bootstrap Ace模板实现菜单和Tab页效果的JavaScript技巧

Bootstrap Ace是一个基于Bootstrap框架的高级响应式后台管理模板,它提供了许多强大的功能和组件,使得构建现代化的Web应用程序变得更加容易。通过使用Bootstrap Ace提供的强大组件和样式,我们可以轻松地构建现代化的Web应用程序界面。希望本文能对您有所帮助!在上述代码中,我们使用了Bootstrap的导航菜单组件,并结合Bootstrap Ace的样式和交互效果来创建菜单。首先,我们需要引入Bootstrap和Bootstrap Ace的CSS和JavaScript文件。

CsCufft的博客 476

bootstrap标签页(tab)

Bootstrap 标签页(Tab)插件 标签页(Tab)在 Bootstrap 导航元素 一章中介绍过。通过结合一些 data 属性,您可以轻松地创建一个标签页界面。通过这个插件您可以把内容放置在标签页或者是胶囊式标签页甚至是下拉菜单标签页中。 用法 您可以通过以下两种方式启用标签页: 通过 data 属性:您需要添加 data-toggle="tab" 或 da

小巷陌影 1137

树莓派5安装ROS1避坑指南:从系统配置到cmake报错全解决

本文详细介绍了在树莓派5上安装ROS1的完整流程,包括系统配置、环境变量设置、cmake报错解决等关键步骤。针对树莓派5的ARM架构特性,提供了从基础安装到高级调试的系统级解决方案,帮助开发者高效部署ROS1并避免常见编译陷阱。特别针对cmake报错问题,给出了深度解析和实用修复方法。

spark7igniter的博客 233

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 216

bootstrap中tab页动态增加和关闭

【代码】bootstrap中tab页动态增加和关闭。

qq_33647211的博客 1047

systermverilog中for循环中的fork join执行情况分析

仅为本人学习记录,如有错误感谢指正!

qq_63807221的博客 1461

基于Bootstrap的标签页组件bootstrap-tab使用说明

bootstrap-tabbootstrap-tab组件是对原生的bootstrap-tab组件的封装,方便开发者更方便地使用。

jrn1012的专栏 2万+

TS808效果器制作教程

TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。...

qq_18948149的博客 3421

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

Vue2+Bootstrap4.6.2制作Tab标签页(图片、标题和日期)

comments="comments"父组件向子组件的props传递comments数据。:class实现动态类名:点击哪个→对应index的li生效active类;:is实现动态切换组件;

m0_72726144的博客 201

【一看就会】Autoware.universe的“规划”部分源码梳理【0】——Planning综述(持续更新中)

单独开一篇planning综述,作为整个规划系列的开篇。本篇综述会持续更新,希望能帮助大家更好的整体理解规划部分。这个部分会持续更新。

weixin_48386130的博客 1963

bootstrap tab页实现鼠标悬浮自动切换

一 版本 bootstarp版本:2.0 query版本:2.1.1.js 二 代码 代码不能运行,请自行添加运行环境。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=dev...

学习 3067

从 VS Code 创建 ABAP Development Objects,包、命名、传输请求和 Clean Core 的一条线打通

文章摘要: SAP ABAP开发工具正从传统SAP GUI/Eclipse向VS Code迁移,通过ABAP Development Tools扩展实现代码编辑、调试和传输管理。文章重点分析了创建ABAP对象背后的治理逻辑:1)对象创建涉及包结构、命名规范、传输层等关键设计决策;2)VS Code通过命令面板(Ctrl+Shift+P)提供统一创建入口;3)对象类型选择反映架构意图,应从业务模型角度规划;4)Package是重要的治理边界,需按业务能力分区;5)命名和描述需体现业务语义;6)传输请求标记对象

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 172

C++ PCL点云处理实战专栏

工业级点云处理技术学习资源,涵盖电力、建筑、隧道等领域的实战案例。内容分为三阶段:代码原理(算法认知)、动态库(项目验证)和完整代码(定制开发)。

weixin_45196569的博客 1117

bootstrap-closable-tab

bootstrap-closable-tab组件是一个可关闭标签页的组件。基于jquery和bootstrap 示例 1.gif 截屏示例是div实现方式,更流行的做法,抛弃iframe吧~ 使用方法 引入bootstrap-closable-tab.js文件 在需要显示标签的位置如下代码 <!-- 此处是相关代码 --> <ul class="nav nav-tabs" role="tablist"> </ul> .

weixin_46051617的博客 568

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Bootstrap Tab Collapse 插件使用教程

Bootstrap Tab Collapse 插件使用教程 项目介绍 Bootstrap Tab Collapse 是一个小型 Bootstrap 插件,它可以将 Bootstrap 的标签页组件在小屏幕上切换为折叠组件。这个插件非常适合需要在不同屏幕尺寸上提供一致用户体验的开发者。 项目快速启动 安装 你可以通过以下方式安装 Bootstrap Tab Collapse 插件: npm inst...

gitblog_00306的博客 736

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

推荐开源项目:Bootstrap Closable Tab

推荐开源项目:Bootstrap Closable Tab 是一个基于流行的前端框架 Bootstrap 的扩展插件,它为 Bootstrap 的标签页组件添加了可关闭的功能。在现代Web应用中,这样的功能非常实用,特别是在需要频繁切换和清理工作空间的场景下。 技术分析 基于Bootstrap:Bootstrap 是最广泛使用的前端框架之一,提供了丰富的预设样式和组件,使得网页开发更加高效。B...

gitblog_00082的博客 401

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Bootstrap V3使用Tab标签

Bootstrap V3使用Tab标签 &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&g

weixin_34279061的博客 234

bootstrap如何修改标签页切换的过渡时间

在 :root 或 .nav-tabs 父容器下重定义该变量,例如::root { --bs-tab-transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;}若只希望局部生效(比如某个特定标签页区域),给外层加 class(如 my-tabs),然后写 .my-tabs { --bs-tab-transition: opacity 0.1s ease-out;important;

u010914760的博客 194

Bootstrap标签页+Echarts折线:切换标签不显示图线问题

在标签页的每个标签显示不同折线图。

weixin_43253044的博客 665

bootstrap的tab中,echarts 图表宽度设为100%之后,会出现图表宽带变为100px的情况。只有第一个正常...

1.原因 echarts官方解释是 Tip: 有时候图表会放在多个标签页里,那些初始隐藏的标签在初始化图表的时候因为获取不到容器的实际高宽,可能会绘制失败,因此在切换到该标签页时需要手动调用resize 方法获取正确的高宽并且刷新画布,或者在 opts 中显示指定图表高宽。 地址:http://echarts.baidu.com/api.html#echartsInstance.resize...

weixin_30344995的博客 412

AngularJs的UI组件ui-Bootstrap分享(六)——Tabs

tabs控件使用uib-tabset指令和uib-tab指令,效果是这样的: 1 <!DOCTYPE html> 2 <html ng-app="ui.bootstrap.demo" xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Co...

weixin_34357436的博客 323
上一篇: pl/sql中三种游标循环效率对比
下一篇: 使用Bootstrap tab页切换的使用
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值