使用jQuery确定元素是否具有特定的后代元素

时间:2016-05-21 14:55:38

标签: jquery descendant

我想确定点击的“li”是否包含/下面有“ul”。

<ul id="menu">
  <li>Item One</li>
  <li>Item Two
    <ul>
      <li>Sub One</li>
      <li>Sub Two B</li>
    </ul>
  </li>
  <li>Item Three</li>
</ul>

我的多次尝试总是返回true,因为我的方法被视为考虑到所有内容,包括“this”:

$('ul#menu li').click(function() {
  if ($(this).has('ul')) {
    ...do something...;
  }
  return false;
});

或者

$('ul#menu li').click(function() {
  if ($(this).find('ul')) {
    ...do something...;
  }
  return false;
});

或者再试一次:

$('ul#menu li').click(function() {
    if ($(this).filter(function( index ) {
        return $( "ul", this ).length >= 1;
        }) ) {
        ...do something...
    }
    return false;
});

我最终把这个拼凑在一起,虽然有效但不优雅:

$('ul#menu li').click(function() {
    var offspring = $(this).children().toArray();
    if (offspring.length == 3) {  //ul in object adds 2 to length
       ...do something... 
    }
    return false;
});

这似乎没什么好事,但我必须遗漏一些基本的东西。

思考?

1 个答案:

答案 0 :(得分:1)

.has()返回一个jquery对象,因此将始终返回true。看起来你需要检查它是否与.length:

有任何匹配的元素
$('ul#menu li').click(function() {
  if ($(this).has('ul').length) {
    ...do something...;
  }
  return false;
});