删除不起作用的父元素和所有子元素
Remove parent and all child elements not working
我正在为自己的用途开发一个插件,我想消除所有出现在顶部的烦人的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。等等
相关文章:
- 删除对HTML元素的拖动
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 从所有元素中删除HTML5验证
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 从组件状态的数组中删除元素
- angularjs删除动态形式元素中的特殊字符
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 删除不起作用的父元素和所有子元素
- 一些元素没有从数组中删除
- 正在尝试删除子元素的最后一个子元素
- JavaScript-如何按类查找元素并删除此类
- 正则表达式条件来删除元素
- Small Javascript从动态表单中删除多个元素的问题
- javascript:在元素删除后停止setInterval
- JQUERY:动态 AJAX 和 html 元素删除
- AngularJS ngRepeat元素删除
- AngularJS & lt; select>使用ng-model和ng-options在元素删除时被破坏
- jQuery UI datetimepicker绑定到错误的输入后DOM元素删除
- 防止 jQuery 在元素删除时取消绑定事件