鑑於含jQuery對象$c
一個其中有多個元件包含與選定類名tmpSelected和元件中的一個,我想選擇從$c
只有一個元素爲每個類名,優選tmpSelected。標記是這樣一個複雜的版本:只選擇兩個選擇器
<ul id="a">
<li class="selected"><a href="foo">Foo</a></li>
<li><a href="bar">Bar</a></li>
<li><a href="baz">Baz</a></li>
<li><a href="biz">Biz</a></li>
</ul>
<ul id="b">
<li><a href="woo">Woo</a></li>
<li><a href="war">War</a></li>
<li class="tmpSelected"><a href="waz">Waz</a></li>
<li><a href="wiz">Wiz</a></li>
</ul>
<ul id="c">
<li class="selected"><a href="xuu">Xuu</a></li>
<li class="tmpSelected"><a href="xur">Xur</a></li>
<li><a href="xuz">Xuz</a></li>
<li><a href="xyz">Xyz</a></li>
</ul>
在這種情況下,我想落得是$("#a > .selected, #b > .tmpSelected, #c > .tmpSelected")
- 我想避免.selected
元素,如果它有.tmpSelected
兄弟,我不想爲$c
的每個成員選擇多個子元素,其中$c = $("#a, #b, #c")
。
原來這就是我想出了:
var $c = $("#a, #b, #c");
var $selected = $c.map(function (idx, el) {
var $el = $(el);
var $tmpSel = $el.children(".tmpSelected");
return $tmpSel.length ? $tmpSel : $el.children(".selected");
});
是否有一個合理的辦法做到這一點沒有明確的循環? (PS - 當沒有.tmpSelected
或.selected
孩子存在時,可以返回一個空選擇器。)
如果沒有'.selected',它是如何爲每個父項返回一個'.tmpSelected'項目,並且當沒有'.tempSelected'時它如何僅爲每個父項返回一個'.selected'? – jfriend00
我已經更新了它。我認爲這是OP的要求。 –
@JohnKalberer不會給我什麼,如果在包含元素中有'.selected'和'.tmpSelected'元素?但我認爲這是正確的軌道 - '「ul> li.tmpSelected,ul:not(:has(li.tmpSelected))> li.selected」'是答案,你同意嗎? – kojiro