2015-12-18 71 views
0

我有一张表,我正在搜索其中的数据。我可以找到数据正常,但我正在使用.each遍历每一行。目前我使用的是text(),它返回行的每一列中的所有文本。然后我检查这个文本。忽略列中的链接

但是,我想忽略一行内的某些列。在这种情况下,如果该列包含链接而不仅仅是文本。

如何更改我的代码以解决此问题?

<table class=table-name> 
    ... 
    <tbody> 
     <tr> 
      <td>Stuff I want to search</td> 
      <td>Stuff I want to search</td> 
      <td><a href="somelink.com" class="some-class">Link text I don't want to search</a></td> 
     </tr> 
     ... 
    </tbody> 
</table> 

代码

var row = $(".table-name").find("tbody").find("tr"); 
var input = 'Link text'; 

row.each(function() { 
    if ($(this).text().toLowerCase().indexOf(input) >= 0) { 
     $(this).toggleClass("hide", false); 
    } else { 
     $(this).toggleClass("hide", true); 
    } 
}); 

回答

3

可以使用过滤掉的文字:

$(this).children('td:not(:has(a))').text().toLowerCase().indexOf(input) >= 0 
0

.each是行,而不是列。 此外,你lowercasing文本,但使用混合的情况下输入搜索...所以像这样的作品,而不是...

var row = $(".table-name").find("tbody").find("tr"); 
var input = 'Link text'; 

row.children().each(function() { 
    if ($(this).text().toLowerCase().indexOf(input.toLowerCase()) >= 0) { 
     $(this).toggleClass("hide", false); 
    } else { 
     $(this).toggleClass("hide", true); 
    } 
}); 

https://jsfiddle.net/71mytwe0/1/