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 に答える