查找下一个元素无法按预期工作

时间:2017-11-20 00:09:51

标签: jquery

我尝试使用列表和子列表并通过jQuery访问项目。

目标是检查每个列表项并检查它是否有子列表!

但使用" .next(" ul")"总是返回true。

我期望达到如下结果:FALSE(第1项不具有UL作为下一个元素),TRUE(第2项具有UL作为下一个元素),FALSE(第3项不具有UL作为下一个元素)和TRUE(第4项) item将UL作为下一个元素。)

我做错了什么?

感谢。

以下是FIDDLE:https://jsfiddle.net/rw1rvamo/1/

<ul>
            <li>
                <div class="container">
                    <span class="icon">.</span>
                    <span class="text"> Item</span>
                    <span class="arrow"></span>
                </div><!-- container -->
            </li>
            <li>
                <div class="container">
                    <span class="icon">.</span>
                    <span class="text"> Item</span>
                    <span class="arrow"></span>
                </div><!-- container -->
                <ul>
                    <li>sub item 1</li>
                    <li>sub item 2</li>
                    <li>sub item 3</li>
                    <li>sub item 4</li>
                </ul>
            </li>
</ul>

脚本:

$( ".container" ).each(function() {
        if($(".container").next().is('ul')) {
            var oi = $(".container").next();
            alert("TRUE");
        }
        else {
            alert("FALSE");
        }   
});     

1 个答案:

答案 0 :(得分:0)

您需要使用$(this)代替$(".container")

检查循环内容器类的实例
$(".container").each(function() {
  var $cont = $(this)
  if ($cont.next().is('ul')) {
    var oi = $cont.next();
    alert("TRUE");
  } else {
    alert("FALSE");
  }
});

请注意,在循环中使用alert()是一种可怕的测试/调试方法。请改用console.log()

FIDDLE DEMO

使用length

检查遍历元素是否存在的备用方法
$(".container").each(function() {
  var $ul = $(this).next('ul');
  if ($ul.length) {
    //do something with $ul
    alert("TRUE");
  } else {
    alert("FALSE");
  }
});