Javascript 将图元从一个图元移到另一个图元

Javascript 将图元从一个图元移到另一个图元,javascript,Javascript,让我们举个例子: <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

让我们举个例子:

<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>

//这是我们的元素,需要删除
//此元素需要删除
//此元素需要删除
//此元素需要删除
//在此之前,已删除元素
我想一次删除这四个元素

这就是我所做的:

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);
}
函数删除(元素){
var body=ourElement.parentNode,
bodyRows=body.getElementsByTagName('tr');
对于(变量i=0;iourElement){
if(bodyRows[i].className==‘无需’){
body.removeChild(bodyRows[i]);
}
if(bodyRows[i].className=='need'){
打破
}
}
}
身体。移除儿童(我们的元素);
}
该函数仅删除
ourElement
之后的第一个empy行和
ourElement
本身

正如我在上面所写的,我需要在函数第一次运行时删除这四个元素

需要纯Javascript。

不能对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;
          }
        }
    }
}
函数删除(元素){
var body=ourElement.parentNode,
bodyRows=body.getElementsByTagName('tr'),
lb=假;
对于(变量i=0;i
不能对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;
          }
        }
    }
}
函数删除(元素){
var body=ourElement.parentNode,
bodyRows=body.getElementsByTagName('tr'),
lb=假;
对于(变量i=0;i
您需要这样的东西:

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
        }
    }
}
函数删除(元素){
var body=ourElement.parentNode;
var childRows=body.childNodes;
var=false;
对于(变量i=0;i
您需要这样的东西:

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
        }
    }
}
函数删除(元素){
var body=ourElement.parentNode;
var childRows=body.childNodes;
var=false;
对于(变量i=0;i
试试这个,每次移除一个孩子,它都会减少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--;
            }
    }
}
函数删除(元素){
var body=ourElement.parentNode,
bodyRows=body.getElementsByTagName('tr'),
lb=假;
对于(变量i=0;i
试试这个,每次移除一个孩子,它都会减少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--;
            }
    }
}
函数删除(元素){
var body=ourElement.parentNode,
bodyRows=body.getElementsByTagName('tr'),
lb=假;
对于(变量i=0;i
我刚刚意识到您可能正在寻找一个函数来删除边界内的项目,比如: 类“需要”和类“需要”之间的项目,并删除其中的所有项目。如果这是你的问题,答案如下:

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
函数删除(tagElement,boundClass){
var tr=document.getElementsByTagName(tagElement),
re=new RegExp(“(^ |\\s)”+boundClass+”(\\s |$)”,
绑定=假,
r=[];

对于(var i=0,len=tr.length;i我刚刚意识到您可能正在寻找一个函数来删除边界内的项,比如: 类“需要”和类“需要”之间的项目,并删除其中的所有项目。如果这是您的问题,答案如下:

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
函数删除(tagElement,boundClass){
var tr=document.getElementsByTagName(tagElement),
重新