3

私のドキュメントのいくつかの<tr>'s 内には 7 つのクラスがあり、それぞれに対応するクラス名 (つまり、sub、id、assigned、sub、sub、status、および 1 つのクラスレス「td」) がある場合があります。td class = "status" 内には、 <span class = "statusBox">Passed</span> または として定義されたスパン クラスがあります。<span class = "statusBox">Failed</span>.

スパン クラスに含まれるテキストが「合格」の場合は、全体を削除する必要があります<tr>。失敗した場合は、ドキュメントに残ります。どうすればこれを達成できますか?

私の最初の試みは、次のような呼び出しによるものでした。

function() {
    if ($('tr td span.statusBox').html() == "Passed"){
    $('tr td span.statusBox').hide();  
}

しかし、これにより、全体ではなく、「Passed」というフレーズのみのすべてのインスタンスが削除されました<tr>

私も試してみました $("tr td span.statusBox:contains('Passed')").each(function(){ $(this).css("visibility","hidden"); });

これはより正しい道に沿っているように感じますが、うまくいかないようです。

4

3 に答える 3

5

あなたは近かった: 「Passed」という単語が表示されたステータスボックスを見つけてから、最も近い祖先tr要素を見つけてDOMから削除します:

$("tr td span.statusBox").filter(":contains('Passed')").each(function(){
    $(this).closest('tr').remove();
});

演算子は jQuery 拡張機能であるため:contains(CSS 仕様から廃止されました)、セレクターを 2 つの部分に分割する方が高速です。1 つ目は、 class のすべてのスパンを検索statusBoxすることです。これは、ネイティブのブラウザー メソッドを使用して要素を検索します。次に、これらの要素は、:contains演算子を使用してフィルター処理されます (ブラウザーに応じて、ネイティブ実装があるか、jQuery で実装される場合があります)。

于 2013-06-26T13:55:41.313 に答える
0
$(".statusBox").each(function (i, e) {
    if ($(e).text() == "Passed") {
        $(e).closest('tr').hide();
    }
});

http://jsfiddle.net/B7Wqy/

于 2013-06-26T14:01:52.337 に答える
0

これは、親の代わりにスパンの可視性を変更しているためです<tr>。を使用$(this).closest('tr')して行要素にアクセスし、その可視性を変更できます。

$("tr td span.statusBox:contains('Passed')").each(function(){
    $(this).closest('tr').css("visibility","hidden"); 
});
于 2013-06-26T13:54:40.730 に答える