您好我想在我的网页上隐藏一些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>
答案 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();
});
答案 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