2

次の 2 つの例では、「PDT」というテキストを直接含む要素のみに一致する jQuery セレクターを見つけようとしています (簡潔にするために切り捨てられています)。

<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>は 、2 番目のケースでは最初の になり<p>ます。両方に一致する単一のセレクター、または誤検知を検出しない複数のセレクターを探しています。

私の分析では、一致する要素について次のことがわかっています。

  • <p>要素または<strong>要素のいずれかです。
  • 彼らは親の最初の子供です
  • 「PDT」というテキストが含まれています
  • 彼らには子供がいません

これらすべての属性を考えると、これらの要素を高精度で検出し、誤検出をほとんどまたはまったく起こさない jQuery セレクターが必要だと思います。ただし、これほど複雑なセレクターを使用していないため、1 つをまとめるのに苦労しています。

私が知っているツールは次のとおりです(それぞれドキュメントにリンクされています):

最後のものが役立つかどうかはわかりません。ドキュメントをもっと注意深く読んだところ、テキスト ノードが :empty セレクターによって考慮されていることに気付きました。そのため、ターゲットにしようとしている HTML 要素は実際には空ではありません。ただし、テキスト ノードは 1 つだけで、他には何も含まれていないという事実に頼ることができます。

私の最初のショットは:

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

しかし、それはうまくいきませんでした。私は他のいくつかのバリエーションを試しましたが、ちょっと困惑しています。誰でもガイダンスを提供できますか?

1 つの注意点: 実際にはスクリプトで jQuery を使用しているのではなく、その Sizzle セレクター エンジンを使用しています。したがって、これをすべて 1 つのセレクターで行う必要があり、.find() や .filter() などの jQuery メソッドを使用することはできません。

助けてくれてありがとう!

4

2 に答える 2

5

すべての基準を使用して、次のことができます。

試してみてください:http: //jsfiddle.net/CKuYD/

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

「PDT」の周りのスペースに注意してください。

これは、テキストが含まれ、最初の子であり、他の子タグがない場合に返されます。

于 2010-07-29T00:34:56.100 に答える
1
$('strong:contains("PDT"):first-child, p:contains("PDT"):first-child')

これは明らかにIDとコンテキストに基づいて最適化できます。

于 2010-07-29T00:34:09.293 に答える