删除不起作用的父元素和所有子元素

Remove parent and all child elements not working

本文关键字:元素 删除 不起作用      更新时间:2023-09-26

我正在为自己的用途开发一个插件,我想消除所有出现在顶部的烦人的wordpress消息,包括更新、错误、信息等。鉴于插件的菜单页是由php生成的这一明显事实,我试着用php代码删除这些消息,根据我的研究,该代码是:

function remove_core_updates(){
    global $wp_version;return(object) array('last_checked'=> time(),'version_checked'=> $wp_version,);
}
add_filter('pre_site_transient_update_core','remove_core_updates');
add_filter('pre_site_transient_update_plugins','remove_core_updates');
add_filter('pre_site_transient_update_themes','remove_core_updates');

我在插件php文件的顶部添加了这个,应该删除通知,但一些插件的错误消息仍然出现。除此之外,上面的代码删除了我在仪表板中访问的所有菜单页面的更新通知。这是我不想要的。

作为一种变通方法,我编写了一个函数,可以实现我想要的功能:

function remove_wp_messages(selector) {
    var child = document.querySelector(selector),
        parent = child.parentNode,
        index = Array.prototype.indexOf.call(parent.children, child);
    for (var i = 1; i < Number(index + 1); i++) {
        var elements = document.querySelector("#wpbody-content > :nth-child(" + i + ")");
        while (elements.firstChild) {
            elements.removeChild(elements.firstChild);
            elements.style.display = "none";
        }
    }
}
window.onload = remove_wp_messages("#wpbody-content > link");

假设我添加到菜单页的第一个html元素是外部样式表的link,则returns上方的javascript函数将创建该link的索引,并从元素中删除直到link的所有子节点,因此产生循环。问题是,我不仅想删除子元素,还想删除父元素,这相当于删除插件内容上方的通知。我试着替换:

elements.style.display = "none";

有了这个:

elements.remove();

运气不好。我不明白的是,父元素被隐藏了,但我用remove()替换了它,它删除了我的内容,而不是通知。为什么?我对php和javascript的建议都持开放态度。


解决方案

根据@PetrSr的回答,我的代码现在看起来是这样的:

function remove_wp_messages(selector) {
    var child = document.querySelector(selector),
        parent = child.parentNode,
        index = Array.prototype.indexOf.call(parent.children, child);
    for (var i = Number(index); i > 0; i--) {
        document.querySelector("#wpbody-content > :nth-child(" + i + ")").remove();
    }
}

相当简单。

像这样向后循环元素应该可以解决您的问题:

for (var i = Number(index); i > 0; i--) {
  //your code
}

删除DOM元素时不能像以前那样循环,因为删除element1后,element2将成为第一个。如果移除第二个元素,那么实际上就是移除了最初的element3。等等