javascript - 仅选择两个选择器之一

标签 javascript jquery

给定一个包含 jQuery 对象 $c ,其中包含多个元素,其中包含类名为 tmpSelectedselected 的元素,我想对于每个类名,仅从 $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");
});

是否有一种合理的方法可以在不显式循环的情况下执行此操作? (P.S. - 当不存在 .tmpSelected.selected 子项时,返回空选择器是可以的。)

最佳答案

这是一个选择器,但它非常困惑。我相信它给出了正确的解决方案:

$("ul > li.tmpSelected, ul:not(:has(li.tmpSelected)) > li.selected");

首先,您查找 .tmpSelected 元素。然后,您查找仅包含 .selected 元素的任何 ul:has 选择器查找子元素,我使用 :not 选择器查找 ul 元素。然后我只需抓取子 selected 元素即可。

jsFiddle

关于javascript - 仅选择两个选择器之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082603/

相关文章:

javascript - 如何获取网页所有包含/使用的文件的 URL 列表?

javascript - 如何在另一个DIV中预览DIV?

javascript - 选择选项始终选择

javascript - 从 Angular JS 的 Controller 启用 CORS

javascript - 在其他类(class)之后将内容导入类(class)

javascript - React Axios - JSON Get 响应未从 render() 显示 - Riot API

javascript - 在 Javascript 中分配变量

javascript - 使用 .getjson 和 .each 构建变量后如何从回调返回变量

javascript - 关于使用 jquery 将图像源更改为另一个图像的源

javascript - 动态更新 FuelUX 向导步骤数