2009-12-08 100 views
0

我的html页面包含大量文本,其中包括很多DIV和表格。隐藏没有ID或类的DIV

在代码的最后,有一个自动生成的代码,如:

<div id="fld1_date" ... style="position:absolute;visibility:hidden"> 

</div> 
<div id="fld3_date" ... style="position:absolute;visibility:hidden"> 

</div> 
<div id="fld8_date" ... style="position:absolute;visibility:hidden"> 

</div> 

的div没有“class”属性。

问题是这些DIV在页面末尾创建了空行。这导致出现水平滚动,并且打印页面占用多于1页。

这些ID是随机分配的,我无法使用它们。实际上,我无法以任何方式触及这些行,但必须通过CSS构建某种解决方案。

当然,我不能重写CSS中的默认DIV行为,因为它将所有其他div(以及其中的几十个)都关闭了。

任何想法如何处理它? (我知道设计并不完美,这是一个5000程序员小时系统,并且改变它将是一个问题)

+0

所以,意译,有人建立了一个不可能的安全箱子,现在不知道如何进入。祝你好运:( – KevinDTimm 2009-12-08 11:19:00

+0

你可以加入任何Javascript? – Simon 2009-12-08 11:25:59

+0

Javascript是一个问题,我没有尝试它,但我的脑海后面看起来很难,完全基于CSS的将是可取的。如果有帮助 - 网站应该只在IE 5.5及以上工作 – Faruz 2009-12-08 11:55:14

回答

4

这里有一些想法:

  • 使用body > divchild selector直接分配display:none所有的DIV下方身体标记,并手动修复“附带损害”。根据文档结构的不同,这可能会使DIV在事后没有明确的display:block版本。但是,>选择器在IE6上不起作用。
  • 使用JavaScript遍历所有DIV,识别违规者并将它们的display值设置为none。这要求您可以添加任何JavaScript,当然,还有一些标准,您可以用它来标识DIV(不必是ID,也许它们始终是页面上的最后DIV,总是会出现后结束页一些标记或诸如此类)
  • 使用条件CSS格式点菜div[id|=fld]捕获所有的div一个ID为“FLD”开始。我不确定这是否违反了“我无法与他们合作”的ID,但它也不适用于IE6(也许更新,我已经太老了,不知道这些文档)。当然,你可以使用任何属性的资料核实,不只是ID

编辑(style,也许?):添加链接

+0

喜欢第三个子弹背后的想法 您可以详细说明一下,也许可以添加一个链接到某种例子吗? – Faruz 2009-12-08 11:52:23

+0

第三个想法是最合适的,但它不会在IE6中工作。我只是接受命中,因为反正IE6应该完全弃用,并且随之而去。 +1 – 2009-12-08 12:02:35

+0

div [id | =“fld”] {display:none; }应该做的伎俩,似乎在IE7和以上的工作 - 见http://www.w3.org/TR/CSS21/selector.html#attribute-selectors和http://msdn.microsoft.com/en-us /library/cc351024%28VS.85%29.aspx#attributeselectors – 2009-12-08 12:03:13

1

是否有一个div的外部容器?

使用JavaScript和Mootools,如果情况确实如此,我会做类似这样的事情;

$('outerContainer').getElements('div').setStyle('display', 'none'); 
+0

我希望有那么.... – Faruz 2009-12-08 11:06:26

1

变化

visibility: hidden 

display: none 

。如果你可以把它不会占用任何额外的空间

+0

“The Ids是随机分配的,我无法使用它们,事实上,我无法以任何方式触及这些行,但必须通过CSS构建某种解决方案。“ – Faruz 2009-12-08 11:07:39

0

;你应该将这些创建的div包装在你应该创建并隐藏的父div中;这里是如何:

<div id="mydiv"> 
    <div id="fld1_date" ... style="position:absolute;visibility:hidden"> 

    </div> 
    <div id="fld3_date" ... style="position:absolute;visibility:hidden"> 

    </div> 
    <div id="fld8_date" ... style="position:absolute;visibility:hidden"> 

    </div> 
</div> 

现在应用下面的CSS隐藏所有:

<script type="text/css"> 
div#mydiv 
{ 
    display:none; 
} 
</script> 
+0

不,我不能,它会自动创建... – Faruz 2009-12-08 11:07:04

1

除了西蒙的建议:如果有问题的div是唯一以' visibility:hidden的”设置明确的,你可以这样做:

var divs = document.getElementsByTagName("div"); 
for(var i = 0; i < divs.length; i++) { 
    if (divs[i].style.visibility == "hidden") { 
    divs[i].parentNode.removeChild(divs[i]); 
    } 
} 

有效地从DOM中完全删除元素(可能有比‘显示:无’每个造型更好的性能)。

+0

我需要努力在这里添加Javascript ..最好的解决方案将完全基于CSS。 – Faruz 2009-12-08 11:53:42

1

如果div在这个级别的直接附加到body,它们都具有相同的ID图案,那么你可以做叠代div的和隐藏这些匹配模式是:

$("body > div").each(function(i, d) { 
    if (d.id && /fld\d+_date/.test(d.id)) { 
     $(d).hide(); 
    } 
}); 

如果生成的ID将始终处于该模式(“fld1_date”),并永远不会有另一个类似的模式

$("body > div[id^=fld][id$=_date]").hide(); 

见:(例如:“fld_foo_date”),那么你可能喜欢的东西逃脱jQuery selector doc欲了解更多信息。

*我的所有代码都未经测试。