2013-08-07 50 views
1

我對所有這些都陌生,在使用時識別父元素時遇到困難:contains過濾一堆div? 我最終的結果是有3個按鈕,當點擊時檢查一個div是否包含特定的單詞,如果是這樣,則將類應用於包含div,將另一個類應用於所有其他div。實質上隱藏並顯示它們。使用JQuery過濾器:包含

我有一個小提琴,它不起作用,但顯示我想創建的想法。

我知道的代碼不起作用,但給出的過程是;

$(".manchester").click(function (e) { 
    if ($('.address:contains("Manchester")').length) { 
     $('holder').addClass('visible'); 
    } 
    if ($('.address:contains("London")').length) { 
     $('.holder').addClass('invisible'); 
    } 
    if ($('.address:contains("Paris")').length) { 
     $('.holder').addClass('invisible'); 
    } 
    e.preventDefault(); 
}); 

,並在http://jsfiddle.net/2fEzS/

回答

2

的邏輯是錯誤的小提琴生活,​​你實際上並沒有過濾元素,而不是定義多個處理程序時,您可以通過點擊的元素的textContent運行如下的代碼。我建議:

$(".filter div").click(function(e) { 
    $('.holder').hide() // hide all the selected elements 
       .filter(':contains(' + $(this).text() + ')') 
       .show(); // show the filtered elements 
}); 

或者:要防止

$(".filter div").click(function (e) { 
    $('.holder').addClass('invisible') 
       .removeClass('visible') 
       .filter(':contains(' + $(this).text() + ')') 
       .removeClass('invisible') 
       .addClass('visible'); 
}); 

http://jsfiddle.net/kdRzQ/

注意div元素不應該被用來作爲一個按鈕,它沒有一個默認操作,因此preventDefault不會在您的代碼中執行任何操作。此外,如果有文檔中的許多元素,它會更好緩存單擊處理的範圍之外的元素:您與類.holder隱藏所有的div!而非只是一個

var $holders = $('.holder'); 
$(".filter div").click(function (e) { 
    $holders.addClass('invisible') // ... 
}); 
+0

謝謝親愛的主席! – user1450749

0

那影響contains位。

你的代碼更改爲:

$(".manchester").click(function (e) { 
    $('.address:contains("Manchester")').closest('.holder').addClass('visible'); 
    $('.address:contains("London")').closest('.holder').addClass('invisible'); 
    $('.address:contains("Paris")').closest('.holder').addClass('invisible'); 
    e.preventDefault(); 
}); 

它是區分大小寫的,雖然如此,如果div包含,而不是「巴黎」巴黎'是不會得到隱藏。

請參閱http://jsfiddle.net/2fEzS/19/