删除无效的父级和所有子级元素

时间:2016-05-15 09:10:28

标签: javascript php jquery wordpress

我正在开发一个供我自己使用的插件,我想摆脱顶部出现的所有烦人的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 javascript函数高于returns 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();

    }
}

非常简单。

1 个答案:

答案 0 :(得分:1)

向后循环这些元素可以解决您的问题:

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

当你删除DOM元素时,你不能循环前进,因为删除element1后,element2成为第一个元素。如果然后删除第二个元素,实际上是删除了原来的element3。等