2016-06-28 12 views
1

TDに特定の文字列が含まれているかどうかを確認したいが、その文字列がSPAN内にない場合にのみチェックする。 TD:文字列を含むがスパン内にない要素

のは、私が「TREASURE」のすべてのTDを確認したいとしましょう:

<td> TREASURE <span>Water</span> </td> -> YES 
<td> Water <span>TREASURE</span> </td> -> NO 
<td> TREASURE </td> -> YES 
<td> <div>TREASURE</div> <span>Water</span> </td> -> YES 

これまでのところ、私は、検索からのスパンの要素を除外するために異なるものを試してみましたが、私は成功しませんでした。

$('table tr td:Contains("TREASURE")').not('span').each(function() { 
    $(this).addClass('found'); 
}); 

ありがとうございます! :)

EDIT:

さらに次のような場合も動作するはず:

<td> TREASURE <span>TREASURE</span> </td> -> YES 

答えて

2

あなたは:has()疑似と:not()擬似クラスセレクタ(又はnot()方法)を使用することができクラスセレクタ。

$('table tr td:contains(TREASURE):not(:has(span:contains(TREASURE)))').addClass('found'); 
 

 
// or 
 

 
$('table tr td:contains(TREASURE)').not(':has(span:contains(TREASURE))').addClass('found');
.found { 
 
    color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>TREASURE <span>Water</span> 
 
    </td> 
 
    <td>Water <span>TREASURE</span> 
 
    </td> 
 
    <td>TREASURE</td> 
 
    <td> 
 
     <div>TREASURE</div> <span>Water</span> 
 
    </td> 
 
    </tr> 
 
</table>

UPDATE: テキストは、両方の場所に含まれている場合は、 filter()メソッドを使用します。実際にはをクローニングし、 :containsセレクタを適用した後にクローンオブジェクトからスパン要素を削除することです。

$('table tr td').filter(function() { 
 
    return $(this) 
 
    .clone() // clone the element 
 
    .find('span') // get all span inside cloned element 
 
    .remove() // remove the spans 
 
    .end() // back to cloned element 
 
    .is(':contains(TREASURE)'); // check the cloned element contains text 
 
}).addClass('found');
.found { 
 
    color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>TREASURE <span>Water</span> 
 
    </td> 
 
    <td>Water <span>TREASURE</span> 
 
    </td> 
 
    <td>TREASURE</td> 
 
    <td> 
 
     <div>TREASURE</div> <span>Water</span> 
 
    </td> 
 
    <td> 
 
     <td>TREASURE <span>TREASURE</span> 
 
     </td> 
 
    </tr> 
 
</table>

+0

おかげ - それは非常に便利だが、それが動作しない唯一の例外があります: '​​TREASURE TREASUREは' - ので、2つの宝物、要素内の一つがあるとき1つの "空白"は、それもトリガする必要があります。それを行う方法は?本当にありがとう! – user1658080

+0

@ user1658080:更新 –

+0

ありがとうございます - それは本当に素晴らしいです!ちょうどフィルターについて学んだ:) – user1658080

関連する問題