2015-05-17 103 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