0

例を見てみましょう:

<table>
    <tr class="need"></tr>
    <tr class="no-need"></tr> // This is ourElement, needs to be removed
    <tr></tr>                 // This element needs to be removed
    <tr class="no-need"></tr> // This element needs to be removed
    <tr class="no-need"></tr> // This element needs to be removed
    <tr class="need"></tr>    // Elements removed until this
</table>

これらの 4 つの要素を一度に削除したいと考えています。

これは私がやったことです:

function remove(ourElement) {
    var body = ourElement.parentNode,
        bodyRows = body.getElementsByTagName('tr');

    for (var i = 0; i < bodyRows.length; i++) {
        if (bodyRows[i] == ourElement) {
            if (!bodyRows[i+1].className) {
                body.removeChild(bodyRows[i+1]);
            }
        }
        if (bodyRows[i] > ourElement) {
            if (bodyRows[i].className == 'no-need') {
                body.removeChild(bodyRows[i]);
            }
            if (bodyRows[i].className == 'need') {
                break;
            }
        }
    }
    body.removeChild(ourElement);
}

この関数は、後の最初の空の行ourElementourElementそれ自体のみを削除します。

上で書いたように、関数の最初の実行時にこれら 4 つの要素を削除する必要があります。

純粋な Javascript が必要です。

4

4 に答える 4

3

境界内のアイテムを削除する関数を探している可能性があることに気付きました。たとえば、クラス「必要」とクラス「必要」の間のアイテムを削除し、その中のすべてのアイテムを削除します。それがあなたの質問なら、答えは次のとおりです。

function remove( tagElement, boundClass ) {

    var tr = document.getElementsByTagName(tagElement), 
        re = new RegExp("(^|\\s)"+ boundClass +"(\\s|$)"),
        bound = false,
        r = [];

    for( var i=0, len=tr.length; i<len; i++ )  {

        if(  re.test(tr[i].className) ) { 
            bound = ( bound === true ) ? false : true;            
            if(bound) continue;
        }

        if( bound ) r.push( tr[i] );
    }

    while( r.length )
        r[ r.length - 1 ].parentNode.removeChild( r.pop() ); 

}

remove( "tr", "need" ); // use it like this
于 2012-09-21T00:37:54.993 に答える
1

次のようなものが必要です。

function remove(ourElement) {
    var body = ourElement.parentNode;
    var childRows = body.childNodes;

    var found = false;
    for (var i = 0; i < childRows.length; i++) {
        var row = childRows[i];

        if(found) {
            if(!row.className || row.className == "no-need") {
                body.removeChild(row);
                i--; // as the number of element is changed
            } else if(row.className == "need") {
                break;
            }
        }

        if(row == ourElement) {
            body.removeChild(ourElement);
            found = true;
            i--; // as the number of element is changed
        }
    }
}
于 2012-09-20T23:47:27.637 に答える
0

これを試してみてください。子を削除するたびに i を減らして補正します。

function remove(ourElement) {
    var body = ourElement.parentNode,
        bodyRows = body.getElementsByTagName('tr'),
        lb = false;

    for (var i = 0; i < bodyRows.length; i++) {
        if (!lb && bodyRows[i] != ourElement) {
            continue;
        } else if(bodyRows[i] == ourElement){
            lb = true;
        }
            if (bodyRows[i].className == 'no-need' || !bodyRows[i].className) {
                body.removeChild(bodyRows[i]);
                i--;
            }
    }
}
于 2012-09-21T00:04:34.220 に答える
0

<または>演算子を DOM 要素で使用することはできません。

function remove(ourElement) {
    var body = ourElement.parentNode,
        bodyRows = body.getElementsByTagName('tr'),
        lb = false;

    for (var i = 0; i < bodyRows.length; i++) {
        lb = (lb)?(bodyRows[i] == ourElement):lb;
        if(lb){
          if (!bodyRows[i].className) {
              body.removeChild(bodyRows[i]);
          }else if (bodyRows[i].className == 'no-need') {
              body.removeChild(bodyRows[i]);
          }else if (bodyRows[i].className == 'need') {
              break;
          }
        }
    }
}
于 2012-09-20T23:40:44.537 に答える