1

:contains現在、jQueryセレクターでリンク要素を選択しようとしています。これは、リンクのコンテンツが単なるテキストの場合に機能します。しかし、要素に他の HTML 要素が含まれている場合、:contains セレクターは代わりに子要素を選択するようです。例

HTML:

<a href="#"><b> two</b> this not bold <b>This</b> is a bold Link</a>

そのhtmlから、このセレクタjQueryを使用してリンクを選択しようとしています:

var selector = "a:contains('<b> two</b> this not bold <b>This</b> is a bold Link')";

var returnObj = $(selector);

返されるオブジェクト (リンク) を 1 つ取得する代わりに、jQuery は 3 つのオブジェクトを返します。

  1. 最初の太字要素
  2. テキストthis is not bold
  3. 2 番目の太字要素

問題は、単一引用符をcontains()使用して、または使用せずに試したので、内の単一引用符ではありません。

これは、私がやろうとしていることの単純化された例です。実際には、ユーザーがクリックするリンク オブジェクトに基づいて動的にセレクターを作成しています。次に、後で使用するためにそのセレクターをデータベースに保存します (アプリがそのリンクに関連するコンテンツを表示するため)。リンクの内容を取得できるので、リンクa:contents()id.

これらのページに基づいて、構文が正しいようです:
http://docs.jquery.com/Tutorials:How_to_Get_Anything_You_Want_2
http://api.jquery.com/contains-selector/

リンクオブジェクトを取得する方法について考えていますか? ありがとう!

これがばかげた質問ではないことを願っています。私はJSとjQueryが初めてです。

4

2 に答える 2

0

前述のように、:contains()内部 HTML ではなく、テキスト コンテンツのみで選択することを意図しています。

aそのテキストに基づいて要素を一致させる必要がある場合は、<b>タグを削除します。

var selector = "a:contains(' two this not bold This is a bold Link')";

それ以外の場合は、コンテキスト セレクター (周囲の要素、親、兄弟などに基づいて選択するなど) を使用してこの選択を単純化できるかどうかを確認するか、クラスを割り当てて代わりにそのクラスで選択します。

余談ですが、これはもう 1 つの jQuery バグであると考えています ( Sizzleの解析エラーである可能性があります)。あなたの状況で:contains()は、要素を返したり作成したりすることは想定されていません。aセレクターが要素と一致しないという理由だけで、一致を返さないはずです。代わりに、<b></b>タグを新しい要素として扱い、要素と一緒にその場で作成しているaと思われますが、タグは引数文字列内にあり、文字通り解釈されることを意図しているため、これは間違っています...

于 2012-12-11T00:58:37.827 に答える
0

まず、セレクターのテキストが html の実際のテキストと一致しません。
セレクターにはthis not bold、html に存在しない が含まれています。

最も重要なことは:contains、テキストのみで機能することです..そのため、確認する必要があります

$("a:contains('two this not bold This is a bold Link')");

ただし、これは非常に非効率的な方法であり、ターゲットにする要素にクラスを追加し、それをターゲットに使用することをお勧めします..

于 2012-12-11T00:53:19.010 に答える