2010-06-04 43 views
32

这不行,应该吗?或者,你可以停止错误,如果另一条线可以做同样的:测试是否显示=无

function doTheHighlightning(searchTerms) { 
    // loop through input array of search terms 
    myArray = searchTerms.split(" "); 
    for(i=0;i<myArray.length;i++) 
    { 
     // works. this line works if not out commented. Will highlight all words, also in the hidden elements 
     //$('tbody').highlight(myArray[i]); 

     // not working when trying to skip elements with display none... 
     $('tbody').css('display') != 'none').highlight(myArray[i]); 
    } 

    // set background to yellow for highlighted words 
    $(".highlight").css({ backgroundColor: "#FFFF88" }); 
} 

我需要在一个表中筛选行和颜色一些字。如果选择了很多单词,数据已成为着色的方式。所以我会尝试通过只穿过没有隐藏的元素来限制着色。如果你想获得可见tbody元素

$('tbody :visible').highlight(myArray[i]); 

回答

44

,你可以这样做:

+0

嗨。 tbody:可见的做法非常好。可以搜索大量的数据并仅突出显示的文本。大。 – Tillebeck 2010-06-09 12:44:35

+3

@Tillebeck - 只要你明白,选择器中的'空间'是一个重要的操作员。它表示你正在寻找一个后代。因此'tbody:visible'会查找'visible'的'tbody'元素,而'tbody:visible'会查找'tbody'的*后代*,它们是':visible'。祝你好运! :) – user113716 2010-06-09 12:54:05

1
$('tbody').find('tr:visible').hightlight(myArray[i]); 
5

试试这个,只选择下tbody可见元素

$('tbody:visible').highlight(myArray[i]); 

它看起来类似于Agent_9191给出的答案,但是这一个从选择器中删除空间,这使得它选择可见的tbody元素而不是可见的后代。


编辑:

如果你特别想在tbody元素display CSS属性使用一个测试,你可以这样做:

$('tbody').filter(function() { 
    return $(this).css('display') != 'none'; 
}).highlight(myArray[i]); 
+0

由于某种原因,它不起作用。当删除tbody和:visible(tbody:visible)之间的空格时,它可以工作。我不知道它是否应该起作用(我可能会运行一些错误的软件,不知道)。但非常感谢你的回答。对不起,但我标记帕特里克答案是正确的,即使它几乎是你的克隆;-) – Tillebeck 2010-06-09 12:47:13

43

使用这样的:

if($('#foo').is(':visible')) { 
    // it's visible, do something 
} 
else { 
    // it's not visible so do something else 
} 

H操作它有帮助!

+3

不是最佳实践,但我认为这是初学者的最佳途径。 – tersakyan 2013-01-30 16:27:17

+0

这对于slideToggle和IE8非常适用,因为IE认为填充是高度#justSayin – 2013-11-12 19:06:22

+3

@tersakyan这里的最佳做法是什么? – 2016-09-03 22:24:59

1

正如@ Agent_9191并提到@partick你应该使用

$('tbody :visible').highlight(myArray[i]); // works for all children of tbody that are visible 

$('tbody:visible').highlight(myArray[i]); // works for all visible tbodys 

此外,因为你似乎是在施加一个类来突出显示的话,而不是使用jQuery来改变所有匹配高光的背景,只需创建一个具有所需背景颜色的CSS规则,并在您分配该类后直接应用它。

.highlight { background-color: #FFFF88; } 
+0

超级。感谢您的解释。这可以解释为什么只有后者才有效(可见的tbodys)。而且是的。 CSS应该进入CSS文件,而不是在各种js文件中定义。无论是性能还是设计人员都不会感到沮丧:-)会的。 – Tillebeck 2010-06-09 12:53:13