Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除Javascript中的元素列表_Javascript - Fatal编程技术网

删除Javascript中的元素列表

删除Javascript中的元素列表,javascript,Javascript,考虑以下代码。 在“videos\u list”elementi的内部,有一个在“couple”变量中得到的元素列表。我正试图删除所有属性与“list\u couple”属性不同的元素(为了测试,我只放了一个元素)。问题是,当他找到元素时,他不会删除找到的元素之后的其他元素 示例说明:考虑列表(“x”)、“r”、“t”、“b”、“h”、“p”)和 ID=“t”< /代码>。 他正在做的是(“,”t“,”b“,”h“,”p”) 他应该做(“,”t“,”t“,”t“,”t“,”或(“t”) 为什么在

考虑以下代码。 在
“videos\u list”
element
i
的内部,有一个在“couple”变量中得到的元素列表。我正试图删除所有属性与“list\u couple”属性不同的元素(为了测试,我只放了一个元素)。问题是,当他找到元素时,他不会删除找到的元素之后的其他元素

示例说明:考虑列表<代码>(“x”)、“r”、“t”、“b”、“h”、“p”)和<代码> ID=“t”< /代码>。 他正在做的是

(“,”t“,”b“,”h“,”p”)

他应该做
(“,”t“,”t“,”t“,”t“,”或
(“t”)

为什么在他找到元素后“i”的值在0和1之间切换?我在示例中通过alert()函数看到了这一点。我相信问题在于“while”循环

var clicked = 0;
var interval = setInterval(function( ) {

    var list_couple = new Array("2583521"),
    clicks = 1,
    videos = document.getElementById( "videos_list" ),
    couple = videos.getElementsByTagName( "a" );

    var i = 0;
    while( i < couple.length ) {
        var flag = 0;
        //alert(i);// To see the value of the i.
        for(j = 0; j < list_couple.length; j++) {
            if((couple[i].getAttribute( "ai" )) == list_couple[j]) {
                flag = 1;// Element found.
                i++;
                break;
            }
        }
        if( !flag ) {
            videos.removeChild( couple[i].parentNode );
        }
    }

    document.getElementById('btnMoreVideos').click();// Click on the button.
    clicked++;
    if(clicked >= clicks) {
        clearInterval( interval );
    }
}, 1000);
var=0;
var interval=setInterval(函数(){
var list_couple=新数组(“2583521”),
点击次数=1,
视频=document.getElementById(“视频列表”),
couple=videos.getElementsByTagName(“a”);
var i=0;
while(i=单击){
间隔时间;
}
}, 1000);

我做错了什么?

更新我刚刚回忆起这个问题,并意识到您的代码片段存在另一个问题(这也出现在@nicoserra的答案中)。删除节点时,
耦合
节点列表将更新为实时列表。这将导致
couple.length
减少,并跳过一些节点

<>我建议您考虑使用<代码>前缀和<代码>索引> <代码>,如果您可以依赖于它们对节点和数组迭代的支持。这只是迭代
couple
中的所有锚点,如果元素具有匹配的
ai
属性,那么它将从
视频
父元素中删除该元素。在迭代时更新列表并不重要

var list_couple = ["2583521"],
    videos = document.getElementById( "videos_list" ),
    couple = videos.getElementsByTagName( "a" );

Array.prototype.forEach.call(couple, function(node) {//iterate node list
    if(list_couple.indexOf(node.getAttribute( "ai" )) >= 0) {
        videos.removeChild( node.parentNode );
    }
});
或者也可以向后迭代节点

for (var i = couple.length-1; i >= 0; i--) {
    if(list_couple.indexOf(couple[i].getAttribute( "ai" )) >= 0) {
        videos.removeChild( couple[i].parentNode );
    }
}

我认为您的问题是因为I++应该超出for语句的范围

while( i < couple.length ) {
    var flag = 0;
    //alert(i);// To see the value of the i.
    for(j = 0; j < list_couple.length; j++) {
        if((couple[i].getAttribute( "ai" )) == list_couple[j]) {
            flag = 1;// Element found.
            //i++;
            break;
        }
    }
    if( !flag ) {
        videos.removeChild( couple[i].parentNode );
    }
    i++;
}
while(i
为什么不使用
数组.过滤器
?你做错的是你在同时做每件事。在至少3个函数中用干净的名称将所有这些分开,事情应该自己澄清。请注意,正如我在更新的答案中提到的,还有第二个问题是
couple。删除节点后,长度将发生变化