【问题标题】:Select base elements?选择基本元素?
【发布时间】:2012-04-01 14:27:18
【问题描述】:

如何选择不包含任何元素的元素(使用 jQuery)?

例如,在以下树中:

<div class="a">
    <div class="b">
        <div class="c"></div>
    </div>
    <div class="d"></div>
    <div class="e">Lorem</div>
</div>

只会选择带有classcde&lt;div&gt;s。

【问题讨论】:

    标签: javascript jquery html jquery-selectors


    【解决方案1】:
    $(':not(:has(*))')...
    

    LIVE DEMO

    如果您想使用 filter 函数来实现,请注意 &gt; element 将在下一个 jQuery 版本中被弃用!

    你可以用这个:

    $('*').filter(function(){
            return $('*', this).length == 0
        })
    

    :empty 选择器在这里不起作用,因为&lt;div class="e"&gt; 中有文本节点

    使用:empty 选择器:

    $(':empty')...
    

    docs:

    描述:选择所有没有子元素的元素(包括文本节点)。

    【讨论】:

    • 这很简单,我可以理解。
    • p.s.:在你的演示中它说[]
    【解决方案2】:

    试试这个:

    $('*').filter(function() {
        return $(this).children().length == 0;
    });
    

    您还可以在过滤器函数中使用(更快的)本机 DOM 访问:

    return this.children.length == 0;
    

    【讨论】:

    • 你刚刚重新发明了轮子... :)
    • 不是$('&gt; *', this).length == 0返回true吗?
    • @Derek:你到底是什么意思?
    • 警告! 您的代码已过时或已弃用。我正在检查文档中的术语... Found id: "Note: The $("> elem", context) 选择器将在未来的版本中弃用。它的用法是因此不鼓励使用替代选择器。”
    • 嗯,是的,&gt; 确实没有必要;没有孩子意味着没有孙子:)
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多