我有一些代码,p.words是隐藏的,我试图做出判断,如果下一个div有span标签,那么显示p.words,否则保留css规则。
我使用jquery.next和jquery.find来判断$(this).parent().next('.col').find('span'),但它会显示所有的p.words,即使下一个div没有span标记
<style>
.words{display:none;}
</style>
<script src="jquery.js"></script>
<script>
$(document).ready(function(){
$('.words').each(function(){
if($(this).parent().next('.col').find('span')){
$(this).css('display','block');
}
});
});
</script>
<a>Voodoo
<p class="words"> 1</p><!-- do not show -->
</a>
<div class="col">
<ul>
<li>ATI Rage128 Pro</li><!-- no span tag -->
</ul>
</div>
<a>NVIDIA
<p class="words"> GeForce2 MX</p><!-- show -->
</a>
<div class="col">
<ul>
<li>
<span>NVIDIA GeForce2 MX 400</span><!-- have span tag -->
</li>
<li>
<span>ATI 9200SE</span>
</li>
</ul>
</div> 发布于 2011-10-26 05:33:19
变化
if($(this).parent().next('.col').find('span')){至
if($(this).parent().next('.col').find('span').length > 0){$(this).parent().next('.col').find('span')的结果是一个数组,该数组可能为空,也可能不为空,但在您的条件下将始终解析为true。
发布于 2011-10-26 05:32:44
我认为您可以使用以下代码极大地简化您的代码:
http://api.jquery.com/next-siblings-selector/
另外,我认为问题的根源是find返回一个空数组,该数组的计算结果不是"false“。尝试以下代码:
if ($.find("doesnotexist")){console.log("Hi")}发布于 2011-10-26 05:33:23
这一行是罪魁祸首:
if($(this).parent().next('.col').find('span')){如果没有找到<span>标记,则不会返回false (它将返回一个空的jQuery对象)。尝试在选择器的末尾添加.length;如果jQuery对象为空,则返回0 (0实际上等于false):
if($(this).parent().next('.col').find('span').length){下面是以上代码更改的jsfiddle:http://jsfiddle.net/qfqJZ/
https://stackoverflow.com/questions/7896120
复制相似问题