![](/img/trans.png)
[英]Jquery takes my badly formed html and “fixes”. How do I stop this
[英]Badly Formed HTML: How to NOT show a bullet on an empty li element
我有一些从Flash应用程序创建/输出的HTML,我需要在Firefox中显示/渲染它。
HTML格式很糟糕,所以它会吐出没有ul或ol元素的空li元素和列表,但它会吐出li元素。
如果li元素为空,是否有css标志或任何不显示li项目的方法(请参阅下面的空白代码示例)?
如果li元素没有innerText,那么它会显示项目符号。 但我不希望它这样做,如果li元素中没有innerText,我希望它不显示子弹。 有没有办法做到这一点,而无需解析HTML?
// example of badly formed HTML output from flash
<textformat leading="2">
<li>
<font style=" font-family: 'arial'; font-size: 14px; color: #FFFFFF; letter-spacing: 0px; ">
<b>Influence and Negotiation</b>
<font style=" font-size: 12px; color: #000000; ">
</font>
</font>
</li>
</textformat>
// sometimes I get an empty li element, which in Firefox shows the bullet. I want to NOT show the bullet/li element if it is empty
<textformat leading="2">
<li>
<font style=" font-family: 'arial'; font-size: 14px; color: #FFFFFF; letter-spacing: 0px; ">
<!-- empty li element -->
</font>
</li>
</textformat>
不,没有办法。 有:empty
但是当它下面有一个<font>
元素时它不起作用,并且没有:has
在CSS中有。 你可以使用:has
jQuery,但是因为你已经标记了javascript我认为它是一个选项:
$('li:has(font:empty)').remove();
那会有用吗?
如果要删除空li元素(其中“empty”表示无或仅包含空格内容),您可以执行以下操作:
function getText(el) {
if (typeof el.textContent == 'string') {
return el.textContent;
}
if (typeof el.innerText == 'string') {
return el.innerText;
}
}
var li, lis = document.getElementsByTagName('li');
var re = /^\s*$/;
for (var i=0, iLen=lis.length; i<iLen; i++) {
li = lis[i];
if (re.test(getText(li))) {
li.parentNode.removeChild(li);
}
}
或者,您可以将空LI设置为:
list-style-type: none;
通过添加合适的类,但结果可能在浏览器中不一致。 有些人会留空空间,有些会将其移除。 您还可以使用以下类:
display: none;
把李留在那里,但不显示它,没有空间。 由你决定。
$(document).ready(function(){
$('li').each(function(){
if($(this).html().length == 0)
$(this).css('list-style-type','none')
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.