jquery - TD :contains String but not within a span Element -
i want check wether td contains string if string not within span.
let's want check tds "treasure":
<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
so far have tried different things exclude span elements search wasn't successful.
$('table tr td:contains("treasure")').not('span').each(function() { $(this).addclass('found'); });
thanks lot! :)
edit:
additionally following case should work:
<td> treasure <span>treasure</span> </td> -> yes
you can use :not()
pseudo-class selector (or not()
method) :has()
pseudo-class selector.
$('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 : if text contains in both place use
filter()
method. doing here cloning td
, removing span elements cloned object after applying :contains
selector. $('table tr td').filter(function() { return $(this) .clone() // clone element .find('span') // span inside cloned element .remove() // remove spans .end() // cloned element .is(':contains(treasure)'); // check 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>
Comments
Post a Comment