微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 head 部分中删除具有相同属性和标签名称的所有标签

如何解决如何从 head 部分中删除具有相同属性和标签名称的所有标签

我正在制作一个JS函数,它会改变文档的图标。现在,我知道这听起来很简单,但事实并非如此。我正在尝试制作一个库,所以我需要一个可以将认图标更改为所需图标的功能,反之亦然。如果我尝试将认图标更改为所需图标,它可以正常工作,但是如果我尝试将图标更改为认图标(带有灰色地球的那个),则它不起作用。

icon = function(dir){
        if(typeof(dir)==="string"){
            var elem = doc.createElement('link');
            elem.rel = "icon";
            elem.href = dir;
            doc.head.append(elem);
        }else if(typeof(dir)==="boolean"&&dir===false){
            var tobedel = [];
            var currElems = document.querySelectorAll('link');
            var i = 0; var f = 0;
            while(currElems.length>=0){
                if(currElems[i].rel=="icon"){
                    tobedel.push(currElems[i]);
                    currElems.length--;
                    i++;
                }
            }
            while(tobedel.length>=0){
                doc.head.removeChild(tobedel[f]);
                tobedel.length--;
                f++;
            }
            var elem = doc.createElement('link');
            elem.rel = "icon";
            elem.href = "/default/noimage.png";
            doc.head.append(elem);
            window.setTimeout(function(){
                console.clear();
                var len = efun.logs.length;
                var sen;
                var i = 0;
                while(len>=0){
                    sen = efun.logs[i];
                    efun.gh = sen[0];
                    console.defaultLog(sen[0]);
                    len--;
                    i++;
                }
            },10);
        }
        else{
            efun.cons("Error in icon() function,the parameter you have entered is not a string directory.");
        }
    }

注意:efun 对象是主库对象,efun.cons()console.log() 的快捷方式,efun.logs 是包含所有console.logs() 完成的数组。请注意,我调用console.clear() 函数来消除当我尝试设置认图标时出现的错误,因为它不存在。 console.deafultLog()一个函数,它 console.logs() 没有被推入 efun.logs 数组。但错误是我想从 head 标记删除所有 <link rel="icon" href="<!---directory here-->" 元素。可以有很多带有图标的元素,所以我想删除所有这些元素。为此,我在数组中使用了 document.querySelectorAll(),并进行了几次 while 循环。但是,即使一个新的链接元素被附加到 <head> 标签中,我想删除的前一个元素仍然存在,所以我如何删除所有带有 <link> 标签和 {{1} 的标签} 属性。有没有办法解决这个问题?

解决方法

我想你可能把这件事复杂化了。

您只需一行即可删除所有现有的 <link> 标签

document.querySelectorAll('link[rel="icon"]').forEach(link => link.remove());

要恢复到“地球”图标,您只需要将网址更改为不存在的内容。

var link = document.createElement('link');
link.rel = 'icon';
link.href = 'https://fake.url.com/';
document.getElementsByTagName('head')[0].appendChild(link);

如果你想更好地处理错误,你可以使用 try catch 块。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。