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

Javascript 隐藏div(它只包含脚本标记),javascript,jquery,Javascript,Jquery,嗨,我想在我的网页上隐藏一些div,它们只包含脚本标签…我该怎么做 例如 <div> <div> <div> <script type="text/javascript">some js code</script> </div> <script type="text/javascript">some js code</script> &l

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

例如

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

一些js代码
一些js代码
基本上,这些div是空的,但是它们有脚本标记,所以使用empty是不起作用的。有人能建议我如何删除这些div吗。我的目标是在任何子标记中都没有值的情况下删除父标记本身

如何识别给定父对象的所有子对象都为空。(我想检查空的孩子,即使它有脚本,我想忽略它,认为它是空的,最后如果所有的孩子都是空的,我想删除父节点)

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


空div
空div
空div
剧本
空div
剧本
空div
空div
空div
剧本
空div
剧本

您可以使用
:具有
选择器:

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


您可以使用
:has
选择器:

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



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

这应该检查
元素之外的任何元素是否包含任何文本输出

$('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();
});​
$('div')。每个(函数(){
var$this=$(this);
var$c=$this.contents();
对于(变量i=0,n=$c.length;i0){//检查文本内容
返回;
}
}
$this.hide();
});​

请参见

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

这应该检查
元素之外的任何元素是否包含任何文本输出

$('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();
});​
$('div')。每个(函数(){
var$this=$(this);
var$c=$this.contents();
对于(变量i=0,n=$c.length;i0){//检查文本内容
返回;
}
}
$this.hide();
});​

请参见您可以使用
jQuery过滤器
。下面的代码将确保只有那些只包含脚本标记的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


您可以使用
jQuery筛选器
。下面的代码将确保只有那些只包含脚本标记的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



如果您知道它们将为空(例如
),则可以给它们一个类,然后使用
$(“.removeAfterLoad”).remove()
。您的div不仅包含脚本标记,还包含空白文本节点。您到底想要什么,对于这些只有空格的div是不可见的,这样它们就不会导致换行、填充等,或者实际上从DOM中删除?@ssilas777为什么不能用英语而不是txtspk编写?@Alnitak感谢您指出了一个可怕的错误,如果您知道它们将是空的,您可以给它们一个类(例如
)然后使用
$(“.removeAfterLoad”).remove()
。您的div不仅包含脚本标记,还包含空白文本节点。您到底想要什么,使这些仅限空白的div不可见,从而不会导致换行、填充等,或者实际上从DOM中删除了?@ssilas777为什么不能用英语而不是txtspk编写?@Alnitak感谢您指出可怕的错误如果块中还包含其他内容,这不会删除/隐藏块吗?这会保证div是空的,并且其中只有script标记吗?(我只想隐藏/删除空的、有脚本标记的div)@Kalish如果有脚本子元素,它会隐藏div元素。但是我还有其他div不是空的,但是有脚本子元素,所以(我只想隐藏/删除空的div或者它只有脚本标记)@Kalish好的,试试更新的代码。它会隐藏只有script子元素的div。如果这些块还包含其他内容,这不会删除/隐藏它们吗?这会保证div是空的,并且其中只有script标记吗?(我只想隐藏/删除空的、有脚本标记的div)@Kalish如果有脚本子元素,它会隐藏div元素。但是我还有其他div不是空的,但是有脚本子元素,所以(我只想隐藏/删除空的div或者它只有脚本标记)@Kalish好的,试试更新的代码。它隐藏了只有脚本子元素的div。我不确定它是否有效
$(this).text()
将返回
标记的内容。@VisioN crap,所以它会。。。我把这个问题误读为使用外部脚本,而不是内联脚本。是的,似乎效果不错。然而,我仍然怀疑作者的观点:我的目标是在任何子元素都没有价值的情况下删除父标记本身。真不确定啊,他后来补充说。该死。@all,我已经更新了问题,如果有n个父母的孩子,ch