如何使用JS/Jquery替换重复的CSS样式-嵌套列表
How to use JS/Jquery to replaces repeated CSS styles - Nested List
我正在制作一个嵌套列表,并希望悬停样式覆盖其容器的全部宽度。为了做到这一点,我正在从ul中删除默认的边距,并在li中应用padding-left到div,但这意味着有很多低效的代码。参见下面的DEMO
ul { list-style: none; padding: 0; margin:0 }
li { margin:0; padding: 0;}
li > div:hover { background-color: #eee}
li div{padding-left:0px}
li li div{padding-left:20px}
li li li div{padding-left:40px}
li li li li div{padding-left:60px}
我不能继续应用这些样式,因为我正在创建一个文件树,所以层次结构可以永远继续下去。有人知道在jQuery中有什么有效的方法吗?非常感谢
这里有一小段代码可以做你想做的:
$('div:not(:first)').each(function(){
var numEl = $(this).parentsUntil('div:first', 'ul').length - 1;
$(this).css('padding-left', numEl * 20 +'px')
})
它计算ul
的数量,直到你点击根并添加填充。
小提琴:http://jsfiddle.net/MKK8v/26/
编辑:由于性能问题,这里有一个优化的代码10倍的速度:
$('ul').each(function(){
var $this = $(this);
var index = $this.parents('ul').length == 0 ? 0 : getIndex($this);
$this.data('index', index);
})
function getIndex(el){
return parseInt(el.parents('ul').first().data('index'))+1
}
$('div:not(:first)').each(function(){
var numEl = $(this).closest('ul').data('index');
$(this).css('padding-left', numEl * 20 +'px')
})
不是循环遍历所有父div
,而是检查ul
索引i放在data
中。
小提琴:http://jsfiddle.net/MKK8v/33/
相关文章:
- 如果文本字段为空,则使用JavaScript应用CSS样式
- FF和Chromium中CSS样式按钮的外观差异
- CSS样式属性留空
- CKeditor预览插件.js,为Chrome和IE进行编辑.因为它拒绝CSS样式
- 基于路由的CSS样式-Angular2
- 为未标记的文本添加CSS样式
- 使用JQuery将现有CSS样式扩展%-%
- JavaScript-在keyDown上切换css样式
- React js应用程序's在托管应用程序中打开时将覆盖css样式
- 如何在javascript中更改段落中不同行的css样式
- 通过javascript设置IE特定的css样式
- PHP,MySQL,AJAX-调用AJAX结果后,Bootstrap CSS样式不会显示
- 使用javascript/jquery检查.css样式表的名称
- JavaScript和CSS样式不适用于我的“;谷歌网站”;页
- 未使用jQuery验证器选中Css样式复选框时
- javascript正则表达式,用于编辑元素内部的css样式属性
- css样式加载+id.例如加载1、加载300
- 无法在运行时将CSS样式添加到元素中
- d3js 通过其 CSS 样式选择所有元素
- 如何根据浏览器宽度动态调整 css 样式表