0

我想隐藏(删除)所有<div>包含某个字符串的内容。就像一个过滤器。认为它具有浏览器插件的功能。

基本上任何东西

  1. 在 div 内的标签内,或
  2. 立即在 div 内(但不是标签)

关于如何最有效地做到这一点的任何想法?理想情况下,我想要一种让浏览器对此做出良好响应的方法,不仅隐藏 div,而且以页面没有大空白的方式将其删除。

我真的不是很流利地使用javascript,所以我想看看我是否可以在这里得到一些指示。(最好直接使用 JS 或 JQuery?)

谢谢!

4

3 回答 3

2

首先,制定一个计划:

  1. 找到所有具有该短语的节点。这个 SO Q 会有所帮助。
  2. 对于你找到的每个节点,沿着 dom 树向上,直到找到第一个要移除的封闭 div。请参阅 JQuery dom 横向助手
  3. 然后删除适当的 div。您可能想要为它们的移除设置动画,也可以使用 jquery。

回复:使用jquery?由你决定。如果您希望您的代码在多个浏览器上工作,那么 jquery 会有所帮助。您的问题可以使用或不使用 jquery 来解决。

祝你好运。

于 2013-05-12T04:45:24.583 回答
1

从这个答案一起破解:Get all visible DIVs on a page with javascript?

这对于 jQuery 来说相当简单,但您请求的是非 jquery,所以我会快速尝试一下:

function removeDivs(withString) {
    var divs = document.getElementsByTagName("DIV");
    for(var i = 0; i < divs.length; i++) {
        div = divs[i];
        if (div.style.display != "none" && div.innerHTML.indexOf(withString) > -1) {
            div.style.display = "none";
        }
    }
}

我会注意到你说“里面有短语”,但没有指定你想找出短语在里面的级别。在嵌套 div 的情况下,这将尽可能隐藏所有在其 innerHTML 中包含该短语的 div。换句话说,由于 innerHTML 包含所有包含的 div,任何包含其中包含短语的 div 的 div 也将被隐藏,依此类推。

另请注意,这根本不是有效的,因为它可能最终会多余地隐藏不需要隐藏的 div。

如果我要这样做,我会使用 jQuery 并尝试获得更高效的东西......这将是重新发明轮子而不是恕我直言(除非存在阻止 jQuery 运行的技术限制或浏览器限制)。

于 2013-05-12T04:50:02.553 回答
1

试试我的JQuery 插件 searchEngine

句法

$(selector).searchengine(textFilter,action,caseSensitive)

对于您的情况,请按以下方式调用它:

var myTxt="dfvdf...."
$('div').searchengine(myTxt,'remove',false);

如果您还想删除所有<p>包含的内容myTxt

   $('div,p').searchengine(myTxt,'remove',false);

如果你想隐藏它而不是删除它:

$('div').searchengine(myTxt,'hide',false);

如果你想在那之后展示它:

  $('div').searchengine(myTxt,'show',false);

等等

演示:http: //jsfiddle.net/abdennour/k3x53/1/

于 2013-05-12T07:49:11.813 回答