Twitter Bootstrap中的data-toggle属性

284
在Twitter Bootstrap中,data-toggle属性是做什么用的?我在Bootstrap API中找不到答案。
我之前也看过一个类似的问题link。但对我没有太大帮助。
10个回答

211
这是一个 Bootstrap 数据属性,它会自动将元素与其所属的小部件类型关联起来。Data-* 是 HTML5 规范的一部分,而 data-toggle 则是 Bootstrap 特有的。
一些示例:
data-toggle="modal"
data-toggle="collapse"
data-toggle="dropdown"
data-toggle="tab"

请查看Bootstrap JavaScript文档中的data-toggle,并查找其中的代码示例。
一个可行的示例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>

<div class="dropdown">
  <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
    <li><a href="#">Item</a></li>
  </ul>
</div>


9
这只是一个与选择器一起使用的HTML属性,而不是HTML5特有的。 - Umur Kontacı
24
@UmurKontacı data-*是在HTML5规范中引入的,用于嵌入自定义非可见数据的属性。 - epascarello
1
我不确定,但看起来 JavaScript 文档的链接已更改为 http://getbootstrap.com/2.3.2/javascript.html。请验证一下。 - Himanshu
78
您让它听起来像是data-toggle是HTML5规范的一部分,而实际上,data-*是HTML5标准,而data-toggle则属于Bootstrap。 - bentech
2
而且 'data-toggle' 不仅仅是Bootstrap特有的,只是Bootstrap选择使用名称为'toggle'的data-*属性。因此,在另一个项目中,您可能会遇到与Bootstrap无关的 'data-toggle' 属性。 - Daniel Higueras
显示剩余3条评论

75
任何以data-开头的属性都是用于某些特定目的的自定义属性前缀(该目的取决于应用程序)。它被添加为语义补救措施,以解决人们对rel和其他属性的过度使用,而这些属性的目的不是它们最初预期的目的(rel经常用于保存高级工具提示等数据)。
在Bootstrap的情况下,我不熟悉其内部工作原理,但从名称来看,我猜它是一个钩子,允许切换其所附加元素的可见性或可能是模式(例如 collapsable side bar on Octopress.org)。 html5doctor有一篇关于data-属性的好文章Cycle 2是data-属性广泛使用的另一个例子

5
在HTML5中,任何以data-开头的属性都是有效的自定义属性。基本上,这是一种将自定义数据附加到在HTML规范中没有明确定义的元素的方法。 - spiderman

30
例如,假如你正在创建一个列出和展示菜谱的网页应用程序。在客户选择要打开的菜谱之前,您可能希望他们能够对列表进行排序,显示菜谱的特色等等。为了实现这一点,您需要将烹饪时间、主要成分、餐食分类等信息与每个菜谱的列表元素关联起来。
<li><a href="recipe1.html">Borscht</a></li>
<li><a href="recipe2.html">Chocolate Mousse</a></li>
<li><a href="recipe3.html">Almond Radiccio Salad</a></li>
<li><a href="recipe4.html">Deviled Eggs</a></li>

为了将这些信息添加到网页中,您可以采取许多不同的方法。您可以在每个LI元素中添加注释,您可以在列表项中添加rel属性,您可以根据时间、餐点和食材将所有食谱放置在单独的文件夹中(即)。大多数开发人员采用的解决方案是使用class属性来存储有关当前元素的信息。这样做有几个优点:

  • 您可以在一个元素上存储多个类
  • 类名可读性强
  • 使用JavaScript(className)很容易访问类
  • 类与其所在的元素相关联

但是,这种方法也存在一些主要缺点:

  • 您必须记住类的作用。如果忘记或新的开发人员接管项目,可能会删除或更改类,而不意识到这会影响应用程序的运行方式。
  • 类还用于CSS样式,您可能会错误地通过数据类重复CSS类,从而在实时页面上出现奇怪的样式。
  • 更难添加多个数据元素。如果有多个数据元素,您需要以某种方式使用JavaScript访问它们,无论是通过类的名称还是类列表中的位置。但很容易出错。

我提出的所有其他方法都存在这些问题以及其他问题。但由于它是快速轻松地包含数据的唯一方式,因此我们这样做了。 HTML5数据属性挽救了局面

HTML5向任何元素添加了一种新类型的属性-自定义数据元素(data-*)。这些是您可以添加到HTML元素的自定义(用*表示)属性,以定义任何类型的数据。它们由两部分组成:

属性名称 这是属性的名称。它必须至少是一个小写字符,并具有前缀data-。例如:data-main-ingredient,data-cooking-time,data-meal。这是您的数据名称。

属性值 与任何其他HTML属性一样,您需要在引号中包含数据,并用等号分隔。此数据可以是Web页面上有效的任何字符串。例如:data-main-ingredient="chocolate"。

然后,您可以将这些数据属性应用于任何想要的HTML元素。例如,您可以定义上面示例列表中的信息:

<li data-main-ingredient="beets" data-cooking-time="1 hour" data-meal="dinner"><a href="recipe1.html">Borscht</a></li>
<li data-main-ingredient="chocolate" data-cooking-time="30 minutes" data-meal="dessert"><a href="recipe2.html">Chocolate Mousse</a></li>
<li data-main-ingredient="radiccio" data-cooking-time="20 minutes" data-meal="dinner"><a href="recipe1.html">Almond Radiccio Salad</a></li>
<li data-main-ingredient="eggs" data-cooking-time="15 minutes" data-meal="appetizer"><a href="recipe1.html">Deviled Eggs</a></li>

一旦你在HTML中拥有这些信息,你就可以使用JavaScript访问它并基于该数据操作页面。


27

Bootstrap 文档:

<!--Activate a modal without writing JavaScript. Set data-toggle="modal" on a 
controller element, like a button, along with a data-target="#foo" or href="#foo" 
to target a specific modal to toggle.-->

<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>

11

已经有很多答案了,但它们没有直接点到问题的核心。让我们来改进一下。

http://www.w3schools.com/bootstrap/bootstrap_ref_js_collapse.asp

直接点到问题的核心

  1. 任何以 data- 开头的属性都不会被 HTML5 解析器解析。
  2. Bootstrap 使用 data-toggle 属性来创建折叠功能。

如何使用: 仅需2个步骤

  1. 在想要折叠的元素 #A 中添加 class="collapse"
  2. 添加 data-target="#A"data-toggle="collapse"

目的: 如果我们使用 Bootstrap,data-toggle 属性可以让我们创建一个控件来折叠/展开一个 div (块)。


5
在Bootstrap中,data-toggle的目的是让您可以使用jQuery查找特定类型的所有标记。例如,您将data-toggle="popover"放在所有弹出窗口标记中,然后可以使用jQuery选择器查找所有这些标记并运行popover()函数来初始化它们。您也可以将class="myPopover"放在标记上,并使用.myPopover选择器完成同样的事情。文档有点令人困惑,因为它让这个属性看起来好像有一些特殊的作用。
<div class="container">
    <h3>Popover Example</h3>
    <a href="#" class="myPop" title="Popover1 Header" data-content="Some content inside the popover1">Toggle popover1</a>
    <a href="#" class="myPop" title="Popover2 Header" data-content="Some content inside the popover2">Toggle popover2</a>
</div>

<script>
    $(document).ready(function(){
        $('.myPop').popover();   
    });
</script>

工作得很好。


5

这个数据属性的存在告诉Bootstrap在用户交互时切换另一个元素的视觉或逻辑状态。

它用于显示模态框、选项卡内容、工具提示和弹出式菜单,以及为切换按钮设置按下状态。它有多种用法,但没有清晰的文档说明。


4

这是Bootstrap定义的HTML5数据属性。它将按钮绑定到一个事件。


5
不仅限于按钮和/或事件。 - Jowen
我在Chrome开发工具中没有看到按钮的事件监听器。 - jscripter

2

这里你还可以找到更多赋值给data-toggle的值的示例。只需访问该页面,然后按下CTRL+F键搜索data-toggle


2

Bootstrap利用HTML5标准,以便在javascript中轻松访问DOM元素属性。

data-*

形成了一类属性,称为自定义数据属性,允许在HTML和其DOM表示之间交换专有信息,这些信息可能被脚本使用。所有这些自定义数据都可以通过设置属性的元素的HTMLElement接口获得。HTMLElement.dataset属性可访问它们。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接