基于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

Apollo&Carla联合仿真环境搭建与实战调试

本文详细介绍了Apollo与Carla联合仿真环境的搭建与实战调试流程,涵盖硬件配置、软件依赖安装、Apollo环境配置、Carla仿真器安装、桥接服务设置以及常见问题解决方案。通过逐步指导,帮助开发者高效实现自动驾驶仿真测试,提升开发效率。

ee345的博客 200

FAST-LIO2实战:如何在无人机上部署并实现厘米级定位(附ROS配置全流程)

本文详细介绍了如何在无人机上部署FAST-LIO2激光雷达惯性里程计系统,以实现厘米级精确定位。内容涵盖从硬件选型(如激光雷达与机载计算机)、软件环境配置(ROS Noetic)、传感器标定,到FAST-LIO2参数调优、与PX4飞控集成以及实际飞行测试的全流程。重点解决了实时定位中的外参标定、数据同步等关键问题,为无人机在无GPS或复杂光照环境下提供稳定可靠的定位解决方案。

weixin_29062865的博客 248

bootstrap中tab页动态增加和关闭

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

qq_33647211的博客 1047

SGLang HiCache实战:手把手教你配置KV Cache Offload,让大模型推理成本直降84%

本文详细介绍了SGLang HiCache在KV Cache Offload配置与调优中的实战应用,通过多级存储架构和智能卸载策略,显著降低大模型推理成本达84%。文章涵盖HiCache架构优势、环境配置、高级调优策略及生产环境最佳实践,帮助开发者优化GPU显存使用,提升并发处理能力。

weixin_29044713的博客 460

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

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

jrn1012的专栏 2万+

保姆级教程:在瑞芯微RV1126B上部署轻量化YOLOv8,实现端侧实时目标检测

本文详细介绍了在瑞芯微RV1126B芯片上部署轻量化YOLOv8模型的完整流程,包括开发环境搭建、模型训练优化、量化转换及嵌入式部署。通过利用RV1126B的3TOPS NPU算力和AI-ISP特性,实现端侧实时目标检测,提升边缘AI应用的性能和效率。

weixin_30329623的博客 263

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)

本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。

weixin_30430169的博客 280

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

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

m0_72726144的博客 201

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

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

验证方法、符合性方法与设计保证的关系

未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。

qq_41854911的博客 554

【Clickhouse】Clickhouse写入报错keeper server rejected the connection during the handshake

我的clickhouse集群时不时的报这个错误All connection tries failed while connecting to ZooKeeper. nodes: xxx 到时写入数据失败 用的ck自带的keeper。你需要仔细检查ZooKeeper集群的配置和状态,确保所有节点都正常运行,并且能够正确地选举领导者。检查ZooKeeper的ACL以及ClickHouse连接所使用的凭据,确保它们被正确配置和授权。版本不兼容:有时,不同版本的软件之间可能存在不兼容性,导致连接问题。

九师兄 370

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Bootstrap Tab Collapse 插件使用教程

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

gitblog_00306的博客 736

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

推荐开源项目:Bootstrap Closable Tab

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

gitblog_00082的博客 401

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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、付费专栏及课程。

余额充值