0

嗨,我想在我的网页上隐藏一些 div,它们只包含脚本标签……我该怎么做?

例如..

<div>
   <div>
       <div>
        <script type="text/javascript">some js code</script>
       </div>
    <script type="text/javascript">some js code</script>
   </div> 
</div>

基本上这些 div 是空的,但它们有脚本标签,所以使用空是行不通的。谁能建议我如何删除这些 div。如果任何孩子都没有价值,我的目标是删除父标签本身。

我如何确定给定父母的所有孩子都是空的。(我想检查空子节点,即使它有脚本我想忽略它并将其视为空,最后如果所有子节点都是空的,我想删除父节点)

例如考虑这个......(可以有任意数量的孩子,如果所有孩子都是空的,那么删除父母)(我想忽略脚本标签,如果没有其他值,则认为它是空的然后脚本标签)

 <div class="printpage">
<div class="flip">
    <div>empty div</div>
    <div>
        <div>
        <div>empty div</div>
            <div>
            <div>empty div</div>
                <div>
                    <script>script</script>
                    <div>empty div</div>
                </div>
            <script>script</script>
            </div>
        </div>
    </div>
</div>
<div class="flip">
    <div>empty div</div>
    <div>
        <div>
        <div>empty div</div>
            <div>
            <div>empty div</div>
                <div>
                    <script>script</script>
                    <div>empty div</div>
                </div>
            <script>script</script>
            </div>
        </div>
    </div>
</div>

4

3 回答 3

3

编辑这比听起来更难。这是@VisioN 观察到脚本元素自己的文本没有被忽略后的更新答案。

这应该检查除了元素之外的任何元素是否<script>包含任何文本输出。

$('div').each(function() {
    var $this = $(this);
    var $c = $this.contents();
    for (var i = 0, n = $c.length; i < n; ++i) {
        var c = $c.get(i);
        var tag = c.tagName;
        if (tag === 'SCRIPT') continue;                 // ignore script tag
        if (tag === 'IMG' || tag === 'CANVAS') return;  // non-text output
        if ($.trim($(c).text()).length > 0) {           // check text content
            return;
        }
    }
    $this.hide();
});​

http://jsfiddle.net/alnitak/PdCnL/

于 2012-09-25T11:52:18.913 回答
2

您可以使用:has选择器:

$('div:has(script)').hide();

或者:

$('div > script').parent().hide()


$('div > script').parent().filter(function() {
    return !$('script', this).siblings().length
}).remove()
于 2012-09-25T11:49:32.180 回答
1

您可以使用jQuery filter. 以下代码将确保只有那些仅包含脚本标签的 div 才会被隐藏。

var divs = $("div")​.filter(function(){
    console.log();
 return $(this).text().replace(/\s/gi,'') == $('script', this).text().replace(/\s/gi,'');    

}).hide();
alert(divs.length); // return 3

​</p>

演示

于 2012-09-25T11:57:02.230 回答