2015-05-17 72 views
0

与现实生活中的代码更新问题: 我有这个带着孩子选择父母有一定的阶级

jQuery("dt").has("a.is-expanded").addClass("is-expanded"); 

<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed is-expanded" aria-expanded="true">Our services</a></dt> 

我预计要添加的类别是扩展到dt,因为它包含了一个is-expanded类。但是这并没有发生,我不明白为什么?如果我只是把一个然后它的工作,但不是如果我把a.is扩大。我究竟做错了什么?

+0

使用hasClass() –

+1

您使用jQuery UI的手风琴吗?代码何时执行? – Amit

+0

@Amit的有趣的问题很有趣 - 上面的代码可以在“is-expanded”类添加之前运行吗?这可以解释为什么它的工作原理没有“扩展”,但不适用于它 – CupawnTae

回答

2

我怀疑以前is-expanded类是正在执行的JS代码被设置在a元素上(可能是body-onload)。

此外,您还可以将您的选择优化到:

jQuery("dt:has(a.is-expanded)")` 

这意味着jQuery的只返回与那些dt列表的实际有相关的儿童,这是一个更快的任务不是返回所有dt的(特别是如果有很多人),然后用另一个选择呼叫过滤该列表。

+0

阿米特发现了错误! @CupawnTae也应得到信贷的广泛帮助。 – pastic

1

资格在.has()aclass selector

jQuery("dt").has("a.selected").addClass("red"); 
+0

这是我最初尝试,但没有成功。当我写a.selected时,我的dt不会被新类更新,只有当我写一个。但那不是我想要的。这是我实际的HTML,是扩展的是我想​​要打的(我为了简单起见而选择了上面的内容):'

​​
' – pastic

+0

该类仍在被添加,所以可能有其他的东西会干扰它 –

1

可以包括在has()选择的selected类。

要触发每当手风琴变化,侦听手风琴createactivate事件的代码:https://api.jqueryui.com/accordion/#events

jQuery("dt").has("a.is-expanded").addClass("is-expanded");
.is-expanded {background:red} 
 
.is-expanded a {color: yellow}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed is-expanded" aria-expanded="true">Our services</a></dt> 
 
<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed" aria-expanded="true">Other</a></dt>

+0

这就是我最初尝试过,但没有成功。当我写a.selected时,我的dt不会被新类更新,只有当我写一个。但那不是我想要的。这是我实际的HTML,是扩展的是我想​​要打的(我为了简单起见而选择了上面的内容):'

​​
' – pastic

+1

你应该把你的实际代码,包括HTML和JS你运行我的代码片段,它*做*工作,所以一定有其他的东西有效果。 – CupawnTae

+0

我已经用你的实际的HTML更新了我的代码片段 - 注意在'dt'上设置'color'不会改变链接的颜色(所以我为了演示目的将它改成了“background”) - 可以那是你的问题? – CupawnTae