【发布时间】:2015-10-19 08:12:59
【问题描述】:
我正在制作一个简单的 Javascript 菜单,它可以在主要包含 HTML 表单和文本的选项卡之间切换。
为此,我使用以下代码将单击属性分配给更改类样式设置的列表元素:
http://jsfiddle.net/NHKZL/
这种情况下的问题是代码通过遍历类列表来查找要打开/关闭的元素(容器> .class)来跟踪菜单内容。这在每个选项卡中使用纯文本时效果很好,但在使用不同内容(如 php 回显和循环)时效果较差。我认为这是由于 JS 考虑了其中一些标签类。
这是代码行:
var target = document.querySelector('.container>.' + e.target.classList[0]);
我正在寻找替代品的特别部分是:
类列表[0]
发布代码的人指出了这个弱点并建议使用 data-* 来跟踪我希望影响的元素,但我似乎无法弄清楚这会如何影响此特定行中的其余语法.我的解决方案的另一半目前包括向容器类内部的类添加 data-* 属性。
欢迎任何其他有关如何执行此操作的建议。
【问题讨论】:
-
data-* 是类的属性。因此,您应该使用例如
data-count="5"为属性计数传递一个值 5。然后在 js 端你可以使用 var count = $(selector).data('count');或 var count = $(selector).attr('data-count');您确实在课堂上添加了 data-* 吗?什么意思? -
@LelioFaieta 由于该问题没有
jquery标记,因此您确实应该提到以纯JavaScript 方式获取数据属性。我更喜欢<element>.getAttribute("data-count");或新的datasetAPI。 developer.mozilla.org/en-US/docs/Web/Guide/HTML/… -
这个问题的本质就是让JS循环找到每个里面有数据标签的元素。实际值无关紧要,只要我有一种方法可以“标记”受此循环影响的元素。最初它会遍历每个类,然后开始将点击事件添加到我想要影响的类中的内容中。 (Fiddle 中容器下的 div 类切换。)
-
@JeremyJStarcher 你是对的。我更专注于理解他在“将 data-* 属性添加到容器类内部的类”时所指的内容。
-
@JeremyJStarcher 我已经尝试过:“var target = document.querySelector('.container>.' + e.target.getAttribute("data-count"));”但它没有用。很可能是因为这并不像“container>.class”那样引用实际的元素名称。它最终只是一个容器,后跟一个随机数据字符串。
标签: javascript css loops menu