隐藏div(它只包含脚本标记)

时间:2012-09-25 11:47:50

标签: javascript jquery

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

例如..

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

基本上这些div是空的,但是它们中有脚本标签,因此使用empty不起作用。任何人都可以建议我如何删除这些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>

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

您可以使用:has选择器:

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

或者:

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

<击>


$('div > script').parent().filter(function() {
    return !$('script', this).siblings().length
}).remove()

答案 2 :(得分: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

DEMO