IE9无法正确渲染表格单元格

114

我的网站一直在IE8、IE7、FF、Chrome和Safari上运行得很稳定。现在我正在IE9上测试它,遇到了一个奇怪的问题:在某些页面上,一些表格数据呈现不正常。

HTML源代码都是正确的,但每次刷新页面时出现问题的行都会改变(实际上,这个问题只在某些刷新中出现,而不是所有刷新中都有)。

使用IE的F12工具,表格结构看起来是正确的,包含M08000007448的TD后面应该没有空的TD,但仍然呈现为这个样子。

此外,如果我使用F12工具中的“按单击选择元素”工具,并尝试在M08000007448和19之间的空白区域上单击,它会选择TR,而不是“隐藏的td”。

我在应用程序的另一些表格中也遇到了这个表格呈现问题,有人遇到类似的情况吗?它只发生在IE9中 :(

不知道是否重要,但页面是用ASPNET(WebForms)制作的,使用JQuery和其他一些JS插件。

我尝试保存页面(带图像),并在IE9中本地打开它,但问题从未发生过。(当然,我检查了表格结构,并且它是正确的。标题和所有行具有相同数量的TD,必要时具有正确的colspan数量)。


有任何代码吗?也许你在某个地方有不匹配的标签? - Naftali
你能使用IE9 F12工具验证HTML吗? IE9是否告诉您它正在呈现的模式? Quirks Mode,IE 7,IE 8,IE 9 Standards(默认)等等... - Dan Sorensen
IE博客今天提到了一个新工具,可以帮助解决IE 9的兼容性问题:http://blogs.msdn.com/b/ie/archive/2011/04/27/ie9-compat-inspector.aspx - Dan Sorensen
代码真的很长,我不认为问题出在那里。使用F12工具没有发现错误,并且呈现模式是IE9。我会尝试兼容性检查器并让您知道;)我还检查了标签匹配(我做的第一件事),但没有运气。 - fgpx78
这个问题类似于:https://dev59.com/O17Va4cB1Zd3GeqPHjQ0 - Sandeep
显示剩余3条评论
14个回答

0

这是IE9中非常严重的错误。在我的情况下,仅删除不同td之间的空格是不够的,因此我还删除了不同tr之间的空格。现在它可以正常工作了。


0

我在 Knockout 生成的表格中有时也遇到这个问题。在我的情况下,我使用 此处找到的 jQuery 解决方案 成功解决了它。

jQuery.fn.htmlClean = function() {
    this.contents().filter(function() {
        if (this.nodeType != 3) {
            $(this).htmlClean();
            return false;
        }
        else {
            this.textContent = $.trim(this.textContent);
            return !/\S/.test(this.nodeValue);
        }
    }).remove();
    return this;
}

0

在ie9中遇到了相同的格式问题,在ie11中出现了新问题,即正确格式化但需要25-40秒才能呈现大约400行和9列的表格。它有相同的原因,即tr或td标记内的空格。

我正在显示一个由AJAX调用的部分视图渲染创建的表格。我决定在服务器上通过从呈现的部分视图中删除空格来BFH它,使用此处发布的方法:http://optimizeasp.net/remove-whitespace-from-html

这是他的解决方案完全复制:

    private static readonly Regex RegexBetweenTags = new Regex(@">(?! )\s+",     RegexOptions.Compiled);
    private static readonly Regex RegexLineBreaks = new Regex(@"([\n\s])+?(?<= {2,})<", RegexOptions.Compiled);
    private static string RemoveWhitespaceFromHtml(string html)
    {

        html = RegexBetweenTags.Replace(html, ">");
        html = RegexLineBreaks.Replace(html, "<");
        return html.Trim();

    }

以下是一个从另一个SO答案中借来的方法,它返回一个作为字符串的部分视图。
public string RenderPartialViewToString(string viewName, object model)
    {
        this.ViewData.Model = model;
        try
        {
            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
                viewResult.View.Render(viewContext, sw);
                return RemoveWhitespaceFromHtml(sw.ToString());
            }
        }
        catch (Exception ex)
        {
            //logger here
        }
    }

渲染大约400行的表格需要一点时间,但不到一秒钟,对于我的目的来说已经足够好了。


-1

我在 IE10 中使用 KendoUI 表格时遇到了同样的问题。我能够通过以下方法强制 IE 重新渲染丢失的表格单元:

htmlTableElement.appendChild(document.createTextNode(''));

在IE浏览器中,添加一个空的文本节点会导致整个表格重新渲染。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接