如何解决如何从 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 举报,一经查实,本站将立刻删除。