次の 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 メソッドを使用することはできません。
助けてくれてありがとう!