web-dev-qa-db-ja.com

クラス名で要素を削除しますか?

クラス名を持つ要素を見つけるために以下のコードがあります:

// Get the element by their class name
var cur_columns = document.getElementsByClassName('column');

// Now remove them

for (var i = 0; i < cur_columns.length; i++) {

}

それらを削除する方法がわかりません.....親または何かを参照する必要がありますか?これを処理する最良の方法は何ですか?

@ Karim79:

JSは次のとおりです。

var col_wrapper = document.getElementById("columns").getElementsByTagName("div");
var len = col_wrapper.length;

alert(len);

for (var i = 0; i < len; i++) {
    if (col_wrapper[i].className.toLowerCase() == "column") {
        col_wrapper[i].parentNode.removeChild(col_wrapper[i]);
    }
}

HTMLは次のとおりです。

<div class="columns" id="columns">
    <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
    <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
    <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
    <div class="column"><input type="checkbox" name="col_list[]" value="cows">cows</div>
    <div name="columnClear" class="contentClear" id="columnClear"></div>
</div>

編集: jQueryオプションを使用するだけで終わりました。

89
Brett

JQueryを使用すると(この場合実際に使用できます)、次のようにできます:

$('.column').remove();

それ以外の場合は、各要素の親を使用して削除する必要があります。

element.parentNode.removeChild(element);
152
Lior Cohen

JQueryを使用しない場合:

function removeElementsByClass(className){
    var elements = document.getElementsByClassName(className);
    while(elements.length > 0){
        elements[0].parentNode.removeChild(elements[0]);
    }
}
141
Veikko Karsikko

ES6を使用すると、次のようにできます。

const removeElements = (elms) => elms.forEach(el => el.remove());

// Use like:
removeElements( document.querySelectorAll(".remove") );
<p class="remove">REMOVE ME</p>
<p>KEEP ME</p>
<p class="remove">REMOVE ME</p>
28
Roko C. Buljan

JQueryがなければ、次のことができます。

const elements = document.getElementsByClassName("my-class");

while (elements.length > 0) elements[0].remove();
16
tocqueville

Brett- getElementyByClassName IE 5.5から8へのサポートは not therequirksmode = ?.ブラウザー間の互換性を気にする場合は、このパターンに従うことをお勧めします。

  • IDでコンテナ要素を取得します。
  • タグ名で必要な子要素を取得します。
  • 子を反復処理し、一致するclassNameプロパティをテストします。
  • elements[i].parentNode.removeChild(elements[i])他の人が言ったように。

簡単な例:

var cells = document.getElementById("myTable").getElementsByTagName("td");
var len = cells.length;
for(var i = 0; i < len; i++) {
    if(cells[i].className.toLowerCase() == "column") {
        cells[i].parentNode.removeChild(cells[i]);
    }
}

ここに簡単なデモがあります。

編集:マークアップに固有の修正バージョンは次のとおりです。

var col_wrapper = document.getElementById("columns").getElementsByTagName("div");

var elementsToRemove = [];
for (var i = 0; i < col_wrapper.length; i++) {
    if (col_wrapper[i].className.toLowerCase() == "column") {
        elementsToRemove.Push(col_wrapper[i]);
    }
}
for(var i = 0; i < elementsToRemove.length; i++) {
    elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]);
}

問題は私のせいだった。結果の要素の配列から要素を削除すると、長さが変化するため、各反復で1つの要素がスキップされます。解決策は、各要素への参照を一時配列に保存し、その後それらをループ処理して、DOMから各要素を削除することです。

ここで試してください。

10
karim79

これは私のために働く

while (document.getElementsByClassName('my-class')[0]) {
        document.getElementsByClassName('my-class')[0].remove();
    }

forEach/forループよりもwhileを使用することを好みます。使用するには、最初にHTMLCollectionArrayに変換する必要があります。

Array.from(document.getElementsByClassName("post-text"))
    .forEach(element => element.remove());

注意してください、それは最も効率的な方法である必要はありません。私にとってはずっとエレガントです。

3
Alexander

はい、親から削除する必要があります。

cur_columns[i].parentNode.removeChild(cur_columns[i]);
1
David Tang

次の構文を使用できます:node.parentNode

例えば:

someNode = document.getElementById("someId");
someNode.parentNode.removeChild(someNode);
1
Computerish

再帰関数は次のような問題を解決する可能性があります

removeAllByClassName = function (className) {
    function findToRemove() {
        var sets = document.getElementsByClassName(className);
        if (sets.length > 0) {
            sets[0].remove();
            findToRemove();
        }
    }
    findToRemove();
};
//
removeAllByClassName();
1
Can PERK

動的に追加された要素を削除したい場合は、これを試してください:

document.body.addEventListener('DOMSubtreeModified', function(event) {
    const elements = document.getElementsByClassName('your-class-name');
    while (elements.length > 0) elements[0].remove();
});
0
lchachurski
const elem= document.getElementsByClassName('column')

for (let i = elem.length; 0 < i ; )
    elem[--i].remove();

OR

const elem= document.getElementsByClassName('column')

while (elem.length > 0 )
    elem[0].remove();

0
Fatih Ertuğral