47

でいくつかのスパンを持つフォームがありid="myid"ます。この ID を持つすべての要素を DOM から削除できるようにしたいのですが、jQuery が最適な方法だと思います。$.remove()メソッドを使用して、この ID の 1 つのインスタンスを削除する方法を次のように単純に考え出しました。

$('#myid').remove()

もちろん、それは myid の最初のインスタンスを削除するだけです。myid のすべてのインスタンスを繰り返し処理し、それらをすべて削除するにはどうすればよいですか? jQuery メソッドがその方法かもしれないと思ったの$.each()ですが、myid のすべてのインスタンスを反復処理してすべて削除する構文がわかりません。

通常の JS (jQuery を使用しない) でこれを行うクリーンな方法があれば、私もそれを受け入れます。おそらく問題は、ID が一意であると想定されていることです (つまり、複数の要素を持つことは想定されていませんid="myid")。

4

7 に答える 7

71

.remove()それらをすべて削除する必要があります。問題は、ID を使用していることだと思います。ページには特定の ID を持つ HTML 要素が1 つしかないと想定されているため、jQuery は最適化を行っており、それらすべてを検索しているわけではありません。代わりにクラスを使用してください。

于 2010-11-19T08:11:39.803 に答える
45

すべての要素は一意の ID を持つ必要があるため、#myid を持つ要素が複数存在しないようにする必要があります

「id」は一意の識別子です。この属性がドキュメントで使用されるたびに、異なる値を持つ必要があります。この属性をスタイル シートのフックとして使用している場合は、id (正確に 1 つの要素を識別するために使用される) よりもクラス (要素をグループ化する) を使用する方が適切な場合があります。

それにもかかわらず、これを試してください:

$("span[id=myid]").remove();
于 2010-11-19T08:11:27.200 に答える
14

DOM 要素の id は一意である必要があります。代わりにクラスを使用してください ( <span class='myclass'>)。このクラスですべてのスパンを削除するには:

$('.myclass').remove()
于 2010-11-19T08:14:02.970 に答える
11

たとえば、一致する ID 部分を持つすべての要素を削除する場合:

<span id='myID_123'>
<span id='myID_456'>
<span id='myID_789'>

これを試して:

$("span[id*=myID]").remove();

「*」を忘れないでください - これにより一度にすべて削除されます - 乾杯

ワーキングデモ

于 2012-06-04T14:09:20.110 に答える
8

これを行う最もクリーンな方法は、特に html5 セレクター API を使用することですquerySelectorAll()

var contentToRemove = document.querySelectorAll("#myid");
$(contentToRemove).remove(); 

このquerySelectorAll()関数は、特定の ID に一致する dom 要素の配列を返します。返された配列を a に割り当てたらvar、それを引数として jquery に渡すことができますremove()

于 2012-12-31T02:47:15.160 に答える
6

は単一の要素のみを意味するclassため、複数の要素にaを使用する必要があります。idただし、構文に関する質問に答えると、.each()次のようになります。

$('#myID').each(function() {
    $(this).remove();
});

公式のjQueryドキュメントはこちら

于 2012-10-21T02:50:02.690 に答える
0

すでに述べたように、特定の ID を持つことができる要素は1 つだけです。代わりにクラスを使用してください。ノードを削除するための jQuery を使用しないバージョンは次のとおりです。

var form = document.getElementById('your-form-id');
var spans = form.getElementsByTagName('span');

for(var i = spans.length; i--;) {
    var span = spans[i];
    if(span.className.match(/\btheclass\b/)) {
        span.parentNode.removeChild(span);
    }
}

getElementsByTagName ここで使用できる最もクロスブラウザー互換性のある方法です。getElementsByClassNameはるかに優れていますが、Internet Explorer <= IE 8 ではサポートされていません。

ワーキングデモ

于 2010-11-19T08:31:59.433 に答える