I have a.filter
function, which works and marks all parents of <td>
that contain an input field in red.
However, I need the exact opposite. So return all fields that don't contain <input
.
I tried if ($(this).html().indexOf('<input') == -1) {
but that just marks all rows somehow.
My jQuery:
$(document).ready(function () {
$("#ListView1_itemPlaceholderContainer table table table td").filter(function (index) {
if ($(this).html().indexOf('<input') > 0) {
return true;
}
}).closest('div').css('background-color', 'red');
});
Here's my HTML
<div id="ListView1_itemPlaceholderContainer" style=
"font-family: Verdana, Arial, Helvetica, sans-serif;">
<div style="background-color: #FFFFFF; color: #333333;">
<table style="width: 100%;">
<tbody>
<tr>
<td style="width: 71px"><img id="ListView1_userInfo1_0_ImageUser_0" src=
"http://pbs.twimg.com/profile_images/13/6GA5kEu6_normal.png" style=
"height:65px;width:65px;" /></td>
<td style="vertical-align: top">
<table style="width: 100%;">
<tbody>
<tr>
<td></td>
</tr>
<tr>
<td>
<table style="width: 100%;">
<tbody>
<tr>
<td><img id="ListView1_userInfo1_0_Imagebg_0" src=
"https://pbs.twimg.com/profile_banners/13/1402427948" style=
"height:64px;width:251px;" /><br />
<span id="ListView1_userInfo1_0_LabelName_0">dfgdfg</span>
@<span id=
"ListView1_userInfo1_0_LabelUserName_0">dfgdfg</span></td>
<td style="text-align: right"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td><span style="font-size:10px">Follower-<span id=
"ListView1_userInfo1_0_LabelFollower_0">4578</span> ,
Following-<span id=
"ListView1_userInfo1_0_LabelFollowing_0">1654</span></span></td>
</tr>
<tr>
<td><span id="ListView1_userInfo1_0_LabelAbout_0"></span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table><br />
</div>
<div style="background-color: #EEEEEE;color: #333333;">
<table style="width: 100%;">
<tbody>
<tr>
<td style="width: 71px"><img id="ListView1_userInfo_1_ImageUser_1" src=
"http://pbs.twimg.com/profile_images/12/ECWtACTn_normal.jpeg" style=
"height:65px;width:65px;" /></td>
<td style="vertical-align: top">
<table style="width: 100%;">
<tbody>
<tr>
<td></td>
</tr>
<tr>
<td>
<table style="width: 100%;">
<tbody>
<tr>
<td><img id="ListView1_userInfo_1_Imagebg_1" src=
"http://pbs.twimg.com/profile_background_images/37/pTBlAXSm.jpeg"
style="height:64px;width:251px;" /><br />
<span id="ListView1_userInfo_1_LabelName_1">dfgdfgd</span>
@<span id=
"ListView1_userInfo_1_LabelUserName_1">dfgdfgdf</span></td>
<td style="text-align: right"><input type="submit" name=
"ListView1$ctrl1$userInfo$ButtonFollow" value="Follow" id=
"ListView1_userInfo_1_ButtonFollow_1" style=
"height:100px;width:100px;" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td><span style="font-size:10px">Follower-<span id=
"ListView1_userInfo_1_LabelFollower_1">4622</span> ,
Following-<span id=
"ListView1_userInfo_1_LabelFollowing_1">4007</span></span></td>
</tr>
<tr>
<td><span id="ListView1_userInfo_1_LabelAbout_1"></span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table><br />
</div>
</div>
I also check out this post jQuery: use filter(), but work with both results as suggested by commenter.
And tried this:
<script type="text/javascript">
$(document).ready(function () {
$.fn.invert = function () {
return this.end().not(this);
};
$("#ListView1_itemPlaceholderContainer table table table td").filter(function (index) {
if ($(this).html().indexOf('<input') > 0) {
return true;
}
}).invert().closest('div').css('background-color', 'red');
});
</script>
But that also makes all rows red.
You can use .not() along with :has()
I think you should accept Arun's answer. The problem is that indexOf returns the index of the first match char http://www.w3schools.com/jsref/jsref_indexof.asp, and in your case it will be 0, so the condition > 0 won't apply. Also for what concerns == -1 coloring all the rows, better apply your function to tr instead of td
You can change your function to
to mark the rows with input to red, or invert the condition to do the opposite. Or better yet use a different selector as suggested by Arun.
Fiddle for marking red the row with input http://jsfiddle.net/q9othg59/2/ and fiddle for the opposite http://jsfiddle.net/q9othg59/4/