Internet Explorer 9不能正确呈现表格单元格
IE8,IE7,FF,Chrome和Safari,我的网站一直运行顺畅。 现在我正在testing它在IE9上,我遇到了一个奇怪的问题:在一些页面,一些表格数据呈现不正确。
HTML源代码是正确的,并且每当我刷新页面时,给出问题的行都会更改(说实话,问题本身只出现在一些刷新中,而不是全部)。
使用IE的F12工具,表格结构看起来是正确的,在包含M08000007448的TD之后应该没有空的TD,但是仍然像这样呈现。
此外,如果使用F12工具,在工具栏中select“通过单击元素”工具,然后尝试单击M08000007448和19之间的空白处,selectTR,而不是“隐藏的td”。
我在应用程序的其他表中也有这个表格渲染问题,任何人遇到这样的事情? 它只发生在IE9 🙁
我不知道这是否重要,但是页面是用ASPNET(webforms)制作的,并使用Jquery和其他JS插件。
我试图保存页面(与图像),并在本地打开IE9,但问题从未发生。 (当然,我检查了所有的表格结构,没有问题,标题和所有行都有相同数量的TD,必要时有合适的数量)。
我也有同样的问题。 你可能想阅读这个https://connect.microsoft.com/IE/feedback/details/649949/innerhtml-formatting-issues-on-very-large-tables
你可以通过使用javascript删除td之间的空间,如果你的html从ajax返回,然后从响应,你用
response_html = response_html.replace(/td>\s+<td/g,'td><td'); $('#table').html(response_html);
我有相同的确切问题使用jQuery模板填充表。 在IE9中,我一直在大数据集(300+)上使用“鬼”。 这些<td>
将推动我的桌子边界以外的外部列。
我通过做一些非常愚蠢的事来解决这个问题 删除<td>
开始和结束标记之间的所有空格,并将与我的表相关的HTML标记左alignment。 基本上,你想把所有的<td>
</td>
放在同一行,不要有空格。
例:
<table> <tr class="grid_customer_normal"> <td>${primary}</td> <td>${secondary}</td> <td>${phone}</td> <td>${address}</td> </tr> </table>
给予@Shanison的解决scheme只能帮助部分解决问题,但是如果任何其他元素之间存在可以是表内容模型的一部分(如add,th等)的问题,问题依然存在
这是我的领导在工作中devise的一个更好的正则expression式。
if (jQuery.browser.msie && jQuery.browser.version === '9.0') { data = data.replace(/>\s+(?=<\/?(t|c)[hardfob])/gm,'>'); }
涵盖所有表格,标题,colgroup,col,tbody,thead,tfoot,tr,td,th元素。
注意:jQuery.browser在jQuery 1.9中被删除,只能通过jQuery.migrate插件使用。 请尝试使用function检测。
我通过删除空格解决了这个问题:
var expr = new RegExp('>[ \t\r\n\v\f]*<', 'g'); var response_html_fixed = data.replace(expr, '><'); //A disgusting hack for ie9. Removes space between open and close <td> tags $('#treegrid-data').replaceWith(response_html_fixed);
IE博客今天提到了一个新的工具,叫做Compat Inspector脚本,以帮助解决IE 9渲染不兼容的问题。 它可能有助于解决您的问题。
http://blogs.msdn.com/b/ie/archive/2011/04/27/ie9-compat-inspector.aspx
我也有这个问题。
对我来说, td / th标签中的宽度属性会导致这个问题。
改成了style =“width:XXpx” ,问题就解决了:)
我遇到了这个问题,我意识到,当我直接将文本放入<td>
元素时,就发生了这种情况。 我不确定它是否是标准的,但是在<span>
元素中包装任何文本之后,渲染问题就消失了。
所以,而不是:
<td>gibberish</td>
尝试:
<td><span>gibberish</span></td>
find一个非常有用的脚本,以防止不必要的细胞在您的HTML表格呈现时。
function removeWhiteSpaces() { $('#myTable').html(function(i, el) { return el.replace(/>\s*</g, '><'); }); }
这个JavaScript函数,你应该在页面加载时调用(即onload事件)
迟到的答案,但希望我可以帮助这个人。 在IE9中debugging时遇到同样的问题。 解决scheme是删除HTML代码中的所有空格。 代替
<tr> <td>...</td> <td>...</td> </tr>
我必须做
<tr><td>...</td><td>...</td></tr>
这似乎解决了这个问题!
这是IE9中非常严重的错误。 在我的情况下,只删除不同td之间的空白是不够的,所以我已经删除了不同tr之间的空格。 它工作正常。
渲染dynamic表时,我有类似的问题,ie-9。
var table = $('<table><tr><td style="width :100"></td></tr></table>');
当呈现转换为…
<table><tbody><tr><td style="width :100px"></td></tr></tbody></table>
这工作完全罚款ie = 10铬游览…
// but for ie-8 it renders to... with a style attr in my case <table><tbody><tr><td ></td></tr></tbody></table>
你需要写100px
而不是100
。
与ie9有相同的格式问题,在ie11中有一个新的问题,它格式正确,但需要25到40秒才能呈现一个约400行和9列的表格。 它有相同的原因,tr或td标签内的空格。
我正在显示一个由AJAX调用渲染部分视图创build的表。 我决定BFH它在服务器上删除从呈现的局部视图的空白,使用发布在这里的方法: http : //optimizeasp.net/remove-whitespace-from-html
这是他的解决scheme复制到托托:
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(); }
这里是一个方法,返回一个string的部分视图,从另一个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行的表,这对我来说是足够好的。
我有时在Knockout生成的表上有这个问题。 在我的情况下,我使用这里find的jQuery解决scheme修复它
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; }
在IE10中,我和KendoUI网格有同样的问题。 我能够强制IE浏览器使用这个黑客重新提交丢失的表格单元格:
htmlTableElement.appendChild(document.createTextNode(''));
追加一个空的textNode使得IE重新渲染整个表格。