在每个循环中,如果当前元素包含img而不是其他任何东西,我需要添加一个类。这是我最新的不工作代码的迭代,虽然不对 - 但无论如何都可能给你这个想法。
$(".details").each(function(index){
$(this).has("img").not(:contains("p, ul, ol, div, span")).addClass('screenshot-only');
});
显然,我试图排除this
,如果它还包含任何p, ul, ol, div, span
- 那么帮助我解决这个问题会很棒。
如果有办法选择if this has only img and nothing else at all
,那会更好。
答案 0 :(得分:3)
:contains("p, ul, ol, div, span")
应该引用引号,因为Sizzle Engine会将其解析为字符串:
':contains(p, ul, ol, div, span)'
但如果read the jQuery docs https://api.jquery.com/has-selector/搜索TEXT而不是DOM节点
,则很可能不是您的主要问题,:contains
请看一下 https://api.jquery.com/has/ 或https://api.jquery.com/only-child-selector/
快速将与 Github
结合使用$(".details:has(img:only-child)").addClass("screenshot-only");
示例强>
$(".details:has(img:only-child)").addClass("screenshot-only");

.screenshot-only {background: gold;}

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="details">
<img src="//placehold.it/40x40/0bf">
</div>
<div class="details">
<img src="//placehold.it/40x40/0bf">
<p>foo</p>
</div>
<div class="details">
<img src="//placehold.it/40x40/0bf">
</div>
&#13;
或者您更愿意定位此类图片:
$(".details:has(img:only-child)").find("img").addClass("screenshot-only");
&#13;
.screenshot-only {border: 5px solid gold;}
&#13;
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="details">
<img src="//placehold.it/40x40/0bf">
</div>
<div class="details">
<img src="//placehold.it/40x40/0bf">
<p>foo</p>
</div>
<div class="details">
<img src="//placehold.it/40x40/0bf">
</div>
&#13;
答案 1 :(得分:1)
您可以执行以下操作:
$(".details").each(function(index){
$(this).has("img:first-child:last-child").addClass('screenshot-only');
});
修改:正如其他帖子所指出的,您也可以使用:only-child
选择器代替:first-child:last-child
。此外,如果您只想在Roko C. Buljan's answer显示的每个匹配元素中添加一个类,则可以简单地删除each
。
答案 2 :(得分:-1)
如果你没有使用简单的javascript附加到jQuery,这就是jQuery,你可以通过以下方式对它进行测试:
`if (this.contains("img")) {
return; // doesn't do anything
} else {
$(this).addClass('screenshot-only');
}
` is much easier and is 5 lines using the DOM.
// then just