显示一个按钮,并只针对特定的li元素划掉
show a button and strike through only for that particular li element
我有以下代码,它工作得很好,除了当涉及到可能嵌套在LI元素下的嵌套LI元素时,我的目标:
$('#comment-section .comment-box a#un-do').hide();
$('#comment-section ul li[data-is-archived="true"]').map(function() {
$('#comment-section ul li[data-is-archived="true"]').css('text-decoration', 'line-through');
$('#comment-section ul li[data-is-archived="true"] a#un-do').show();
}).get();
这将删除此li元素中的任何文本,并显示与此特定元素(或集合)匹配的每个li元素的撤消链接。
ul
li - strike through works, shows undo button, data-is-archived = true
ul
li - strike through works, shows undo button, data-is-archived = false
为什么每个嵌套的li元素都被划掉并有一个链接出现,而只有那些具有data-is-archived=true
的元素应该被划掉并且链接显示为代码状态?
这是因为text-decoration: strike-through
属性适用于<li>
元素中具有值true
的HTML5数据属性is-archived
的所有文本,无论嵌套的子元素是否适合选择器。我已经在JSfiddle中复制了您的问题(下次请自己这样做):http://jsfiddle.net/teddyrised/TZVej/1/
解决方案是将每个<li>
元素中的文本用<span>
元素包裹起来,并通过限制性的,仅限直接继承的CSS来应用。
$('#comment-section .comment-box a#un-do').hide();
$('#comment-section ul li[data-is-archived="true"]').map(function() {
// Target only <span> elements that are direct descendants
$('#comment-section ul li[data-is-archived="true"] > span').css('text-decoration', 'line-through');
$('#comment-section ul li[data-is-archived="true"] a#un-do').show();
}).get();
在这里查看概念验证:http://jsfiddle.net/teddyrised/TZVej/2/
p/s:我不知道为什么你在问题的上下文中使用.map()
函数…
相关文章:
- 完全可链接的li元素
- 使用li元素的html内容更改该元素的背景
- 需要在量角器中找到使用ng中继器的li元素的数量
- 根据输入值创建li元素
- 要更改变量的高度li元素
- 为li元素添加标题
- 在不使用sort()的情况下获取HTML LI元素的副本
- 将内容从 JSON 数组附加到 li 元素
- 获取 LI 元素的偏移宽度(或等效项)
- addClass 到当前 li 元素并删除类
- 使用纯JS点击即可从li元素中获取文本和id
- Rails-使用Ajax删除li元素
- 对具有相同类级别的不同li元素进行排序
- 显示/隐藏具有不同类的li元素
- 从ul中删除li元素
- 从OL中移除LI元素
- 删除不起作用的li元素
- 从javascript生成的li a元素触发onclick
- 如何使用json对象作为li元素的id属性或使用javascript锚定标记id
- 添加和删除jquery-li元素