我无法弄清楚这一点。我做了一些搜索,我发现了什么,我认为会有用,但事实并非如此。
我有这样的结构。
当您点击某个数字时,该锚点将被删除。当你随后点击另一个数字时,我想知道哪个li没有锚,或者它的文本没有被锚包裹。无论测试如何,我总能得到李的全部范围......它从未通过我的测试。
在下面的例子中,我通过一个元素来重复LI的集合。
var page = jQuery('#thiselement');
jQuery.each(page.find('li'),function(){
if(jQuery(':not(:has(a))',this)){
// also tried jQuery(this), no luck
// no matter what, it ALWAYS falls in this conditional
// if the LI has a link or not, it gets in here
}
}
<ul id="thiselement">
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
</ul>
我需要在锚标记中包装任何通过测试的内容。所以,让我们说当测试是有条件的时候,我们有:
<ul id="thiselement">
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li>4</li>
<li><a href="#">5</a></li>
然后......第四个li将通过测试,因为那是“this”,其中没有“a”。
答案 0 :(得分:2)
首先,jQuery(':not(:has(a))',this)
将始终为真值,它可能为空但在布尔上下文中仍然为真。因此,if($(x))
形式的测试并不十分有用。
你也有点过于复杂。如果您希望<li>
不包含任何<a>
s,那么您可以像这样进行简单的测试:
if($(this).find('a').length == 0)
// You want this one...
如果您希望一次使用小子树,最多一个<a>
,则无需通过尝试找到最佳短路选择器来使事情过于复杂,只需看看您想要的是什么以直截了当的方式进行更有趣的事情。
所以这样的事情应该让它成为现实:
page.find('li').each(function() {
if(jQuery(this).find('a').length == 0) {
// Do interesting things here...
}
});
请注意,您不需要jQuery.each(page.find(...), ...
,只需拨打each
就find
提供给您的内容。
您甚至可以毫不费力地将其重写为filter
电话。
答案 1 :(得分:2)
如果你想做的就是找到没有锚点的列表项,试试这个。
<script type="text/javascript">
$(document).ready(function(e) {
var page = $("#thiselement")
page.find("li:not(:has(a))").wrap('<a href="#">');
});
</script>
<ul id="thiselement">
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li>4</li>
<li><a href="#">5</a></li>
</ul>
否则,如果您需要做更多其他事情,请尝试此操作。
<script type="text/javascript">
$(document).ready(function(e) {
var page = $("#thiselement")
page.find("li:not(:has(a))").each(function(){
$(this).wrap('<a href="#">');
});
});
</script>
<ul id="thiselement">
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li>4</li>
<li><a href="#">5</a></li>
</ul>