2

ブロックのリストが含まれているページで<div>、各ブロックには位置情報が含まれており、それぞれの後に、<div>ボストン<hr>市が含まれていないすべてのdivをターゲットにして削除する必要があります。

私はそれらのdivを簡単に削除することができました: $("div.location").not(":contains('Boston')").remove();

その時、残り物の余剰に気づきました<hr>

最初にすべての仕切りをターゲットにして削除する方がよいでしょうか?それならdiv?1回のjQueryで両方を実行できますか?ありがとう!

4

4 に答える 4

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

デモ

コメントすることに注意してください

$("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
于 2012-12-17T18:56:56.240 に答える
1

jQueryの1つのストロークで両方を実行できますか

それが「より良い」というわけではありませんが、いつでもチェーンしてnext()HRを削除してend()から、ステップバックしremove()てdivを削除するか、またはその逆で最初にdivを削除することができます。

$('div.location').filter(function() {
    return $(this).text().indexOf('Boston') == -1;
}).next('hr').remove().end().remove();
于 2012-12-17T18:56:41.890 に答える
1
于 2012-12-17T18:58:29.213 に答える
0

単純なセレクターを使用して、接続詞のhr要素を残します

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

編集:最初に直接選択することによる二重のdom操作を回避する代替

$("div.location:not(:contains('how'))").add("div.location:not(:contains('how'))+hr").remove();
于 2012-12-17T19:33:35.457 に答える