【问题标题】:Using jQuery determine if element has a particular descendent element使用 jQuery 确定元素是否具有特定的后代元素
【发布时间】:2016-05-21 14:55:37
【问题描述】:

我想确定点击的“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;
});

这似乎很简单,但我一定错过了一些基本的东西。

想法?

【问题讨论】:

  • 也许给有孩子的 li 添加一个父类?这可能会更容易

标签: jquery descendant


【解决方案1】:

.has() 返回一个 jquery 对象,所以总是返回 true。似乎您需要检查它是否有任何与 .length 匹配的元素:

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

【讨论】:

  • 好的,知道它返回一个对象($(this).has('ul').context.childNodes)会有所帮助——应该更仔细地阅读文档。顺便说一句,效果很好,而且更优雅。
猜你喜欢
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2018-03-17
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多