2010-06-04 61 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