2015-12-18 69 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/