web-dev-qa-db-ja.com

jQuery:テキストで要素を探す

idクラスではなく、コンテンツに基づいて要素を見つけることが可能かどうか、だれでも教えてもらえますか。

明確なクラスやIDを持たない要素を見つけようとしています。 (それからその要素の親を見つける必要があります。)

269
sisko

内容に基づいて要素を取得するには、 :contains セレクタを使用できます。

デモはこちら

$('div:contains("test")').css('background-color', 'red');
<div>This is a test</div>
<div>Another Div</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
384
Rocket Hazmat

JQueryのドキュメントではそれは言います:

一致するテキストは、選択した要素内、その要素の子孫、またはその組み合わせの中に直接表示できます。

したがって、:contains()セレクタを使用するだけでは十分ではなく、検索するテキストが直接コンテンツであるかどうかも確認する必要がありますターゲットにしている要素のうち、

function findElementByText(text) {
    var jSpot = $("b:contains(" + text + ")")
                .filter(function() { return $(this).children().length === 0;})
                .parent();  // because you asked the parent of that element

    return jSpot;
}
85
yoav barnea

Fellas、私はこれが古いことを知っていますが、ちょっと私はこの解決法をすべて私よりうまくいくと思います。まず第一に、jquery:contains()が同梱されている大文字と小文字の区別を克服します。

var text = "text";

var search = $( "ul li label" ).filter( function ()
{
    return $( this ).text().toLowerCase().indexOf( text.toLowerCase() ) >= 0;
}).first(); // Returns the first element that matches the text. You can return the last one with .last()

近い将来に誰かがそれが役に立つことを願っています。

20
Morgs

ロケットの答えはうまくいきません。

<div>hhhhhh
<div>This is a test</div>
<div>Another Div</div>
</div>

私は単に彼の DEMOをここ に変更するだけで、ルートDOMが選択されているのがわかります。

$('div:contains("test"):last').css('background-color', 'red');

これを修正するには、コードに ":last"セレクタを追加します。

14
Terry Lin

私の考えでは最良の方法です。

$.fn.findByContentText = function (text) {
    return $(this).contents().filter(function () {
        return $(this).text().trim() == text.trim();
    });
};
13
rplaurindo

はい、jQuery contains セレクタを使用してください。

10
Alex Turpin