2012-12-17 74 views
2

在包含<div>塊的列表的頁面上,每個塊包含位置信息,並且在每個<div>之後都有一個<hr>,我需要針對並刪除所有沒有波士頓城市的div。如何使用jQuery刪除包含特定文本的div以及僅刪除div後的HR分隔符

我能夠很容易地刪除那些的div: $("div.location").not(":contains('Boston')").remove();

那就是我發現的邊角料<hr>

過剩會不會更好的目標並首先刪除所有分隔的?那麼divs?我可以同時使用jQuery嗎?謝謝!

+0

有趣的有多少種方式來做這個句法! –

回答

4
$("div.location").not(":contains('Boston')").next('hr').remove().end().remove();​ 

DEMO

注到comment

$("div.location").not(":contains('Boston')") // return the target div 
    .next('hr') // take the pointer to hr, next to target div 
    .remove() // remove the hr 
    .end()  // return the pointer to target div.location again 
    .remove();​ // remove the target div 
+0

非常感謝!你能具體告訴我添加'.end()'的目的是什麼? – user1729506

+0

@ user1729506請參閱更新答案...我希望這會幫助你。謝謝! :) – thecodeparadox

+0

Awsome!感謝徹底的崩潰。 – user1729506

1

我都可以做的jQuery的一舉

不是它的任何「更好」,但你可以始終只是IT連鎖,取出next() HR,然後用end()退一步remove()股利,或做它周圍的其他方法首先移除DIV,一點兒也不真正的問題太多:

$('div.location').filter(function() { 
    return $(this).text().indexOf('Boston') == -1; 
}).next('hr').remove().end().remove(); 
+0

謝謝!我總是歡迎將「包含」與「過濾器」進行比較的示例。 – user1729506

1

最明顯的一個是$("div.location:not(:contains('Boston')), div.location:not(:contains('Boston')) + hr").remove()​

+0

有趣。你可以提供任何見解,爲什麼這將優於'$(「div.location」)。not(「:contains('Boston')」)。next('hr')。remove()。end() .remove();'?謝謝! – user1729506

+0

當end()工作時,上下文切換可能沒有開銷,但是複雜選擇器'div.location:not(:contains('Boston'))'的重複可能會很慢。我不確定我的方法比其他方法快。 – lavrik

0

使用一個簡單的選擇,然後讓留下的結膜小時的元素在

$("div.location:not(:contains('Boston'))").remove().add("hr+hr").remove(); 

編輯: 替代避免通過直接選擇第一個雙dom操縱

$("div.location:not(:contains('how'))").add("div.location:not(:contains('how'))+hr").remove();