代码之家  ›  专栏  ›  技术社区  ›  Bungle

我可以使用什么jQuery选择器来匹配这些HTML元素(需要“:contains()”)?

  •  2
  • Bungle  · 技术社区  · 15 年前

    我试图找到一个jQuery选择器,它将只匹配以下两个示例中直接包含文本“PDT”的元素(为简洁起见被截断):

    <div>
      <p>
        <strong>(07-27) 21:28 PDT SAN FRANCISCO</strong> -- San Francisco
        supervisors ended more than a decade...
      </p>
      <p>The 10-1 vote, with only Supervisor Chris Daly dissenting</p>
    </div>
    

    <div>
      <p>(07-28) 08:59 PDT WASHINGTON --</p>
      <p>Orders to U.S. factories for big-ticket manufactured goods fell...</p>
    </div>
    

    在第一种情况下,这将是 <strong> ,在第二种情况下,第一种 <p>

    通过我的分析,我知道以下关于匹配元素的事情:

    • < 或者 < 要素
    • 他们是父母的第一个孩子
    • 它们包含文本“PDT”

    考虑到所有这些属性,我认为应该有一个jQuery选择器,它将以高精度找到这些元素,并且很少甚至没有误报。然而,我有一些困难,把一个在一起,因为我没有使用选择器这么复杂了。

    我知道的工具有(每个都链接到文档):

    我不确定最后一个是否有用——我只是更仔细地阅读了文档,注意到文本节点是由:empty选择器考虑的,所以我试图针对的HTML元素实际上不是空的。但是,我可以相信这样一个事实:它们只包含一个文本节点,而不包含其他任何内容。

    我的第一枪是:

    *:contains(PDT):first-child:empty
    

    但那没用。我试过其他几种变体,但我有点为难。有人能提供一些指导吗?

    提前感谢您的帮助!

    2 回复  |  直到 15 年前
        1
  •  5
  •   user113716    15 年前

    使用所有标准,您可以:

    试一试: http://jsfiddle.net/CKuYD/

    var $result = $(':first-child:not(:has(*)):contains(" PDT ")');
    

    注意“PDT”周围的空格。

    如果它们包含文本、是第一个子级并且没有任何其他子标记,则返回。

        2
  •  1
  •   meder omuraliev    15 年前
    $('strong:contains("PDT"):first-child, p:contains("PDT"):first-child')
    

    这显然可以基于ids和上下文进行优化。