【问题标题】:Using jQuery to check if div has text and a span of a certain class使用jQuery检查div是否有文本和某个类的span
【发布时间】:2012-07-30 18:19:50
【问题描述】:
<div class="testDivClass">
    Some text!
    <div>
        <span class="testSpanClass">
        </span>
    </div>
</div>

我想返回 true 或一个不为空的对象(基本上是一个要测试的布尔值)——这告诉我这个 div(属于 testDivClass 类)确实包含“一些文本!”并且确实有一个跨度类“testSpanClass”(请注意,它不是“根”div 的直接子级)。

非常感谢您的任何建议。

到目前为止我有:

$("div.testDivClass:contains('Some text!')");

这很好,但我不知道从这里去哪里。使用.children(".testSpanClass") 什么也没给我。

编辑:我已经尝试过 .has() - 也没有返回任何内容。

【问题讨论】:

    标签: jquery css-selectors


    【解决方案1】:
    $('.testDivClass').is(function() {
        return $(this).text().indexOf("Some text!") > -1 && $(this).find("span.testSpanClass").length
    });
    

    演示:http://jsfiddle.net/Y2KVp/

    带选择器:

    $('.testDivClass').is(':contains("Some text!"):has(span.testSpanClass)');
    

    选择器演示:http://jsfiddle.net/Y2KVp/2/

    【讨论】:

    • 非常感谢 Esailija!我会试一试。乍一看,这比我预期的要复杂得多。再次感谢 +1。
    • 使用选择器会类似于is( ':contains("Some text!"):has(span.testSpanClass)') 它也可以:参见jsfiddle.net/Y2KVp/2
    • 如果这很重要,函数版本会更快一些(它不应该是:P)jsperf.com/selectorfunctionistest
    • Esailija 对此非常感谢,我会在允许时将其标记为答案。我可以问 - 如果我要扩展它并说而不是 span.testSpanClass - 我想检查它是否有一个跨度,其名称包含“SpanText123”并设置为 Display:none;风格?
    • @DeeMac .is(':contains("Some text!"):has(span[name*="SpanText123"]:hidden)');
    【解决方案2】:

    我创建了一个fiddle 来演示如何操作...

    !!$("div.testDivClass:contains('Some text!')").find(".testSpanClass").length;
    

    两个感叹号将 0 转换为 false,将任何其他数字转换为 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2019-11-10
      • 2010-11-16
      • 2018-04-03
      • 2019-05-25
      相关资源
      最近更新 更多