2011-09-01 79 views
24

我有一个类别页面,当用户点击一个类别时,该类别下的项目通过jQuery Ajax调用,在表格中加载,然后卡入到一个元素中低于该类别。看起来会发生什么,是加载表中的一行或两行,将其数据偏移到随机列。我已经在IE9,FF 3.6和Chrome 13中测试过了。这似乎只发生在IE9中。表格数据格式完美 - 我使用Fiddler拦截请求,然后查看原始html,并且没有任何问题。IE9表具有随机列的随机行

该网站建立在ASP.NET MVC3。通过Ajax请求返回的表格返回一个Razor局部视图。不幸的是,这必须在IE中运行。我真的希望有人对此有一个解释。

这里有一个例子: Notice the offset on the second column 而另: Notice the offset on the second to last column

EDIT [2012/03/25]:此应用程序已离开我的手,所以我无法验证其答案的工作。 Adam Youngers发布到http://social.msdn.microsoft.com/Forums/pl/iewebdevelopment/thread/e6f49d52-ec3f-47c5-802e-b80d1a58ed39的链接似乎有一些可能的解决方案。从过去的经验,我先试试这些选项..

  1. 添加<元HTTP的当量= “X-UA兼容” 内容= “IE = 8”/ >到页面的头元素。
  2. 尝试删除表格单元格之间的任何空白。例如。 “</td > <td>”,而不是让下一个单元格在新行上开始。 (这在过去对我造成了奇怪的间距问题)
+0

您应该发布表格的结果html,如果它太长,只发布有问题的行的结果代码。 –

+0

我有同样的问题,并希望补充说,每次我重新加载相同的页面,它发生在不同的行和列。 html没有错。 –

+0

我有同样的问题。我已经完成了表格的HTML,并没有错。我的表格还包含表单元素。我不确定这在技术上是否符合语义。 –

回答

24

问题似乎是白色间距。

我发现http://social.msdn.microsoft.com/Forums/en-AU/iewebdevelopment/thread/28d78780-c95c-4c35-9695-237ebb912d90

这个答案替换你使用正则表达式像这样的AJAX调用获取的HTML。

var expr = new RegExp('>[ \t\r\n\v\f]*<', 'g'); 
tableHtml = tableHtml.replace(expr, '><'); 
+3

如果其他人并不清楚如何获取和更新上面的tableHtml变量,下面是为我工作的代码:var expr = new RegExp('> [\ t \ r \ n \ v \ f] * <','g “); var替换= $('。cal-table')。html()。replace(expr,'><'); $('。cal-table')。html(replacement); $('。cal-table')。tableScroll({height:540,width:tableWidth}); – Winger

+0

这里有一些进一步的讨论:http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/e6f49d52-ec3f-47c5-802e-b80d1a58ed39 – Mike

+0

上面的解决方案最初工作,但没有涵盖了我所有的案例。我一直在随机获取空间。我发布的解决方案解决了我的问题。 –

1

我使用的答案从另一个帖子Remove whitespace and line breaks between HTML elements using jQuery那里有一个脚本这是比上面的一个更有效。我使用了answer来解决它,但我会重复它以获得完整答案。

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

最终,这只是一个临时解决方案,应由Microsoft在IE9/10中修复。

+0

我不确定你是否做了一些性能测试,但是这个解决方案对于大型表格来说有点过分。 – Ravi

+1

我同意这是一张非常大的桌子上的巨大表现。这是解决问题的办法。更好的解决方案是MS解决这个问题。 –

0

给出的解决方案@Johann Strydom的作品,但如果你不想触摸每一个元素,只关注表内容模型。

这是我的领导在工作中设计的一个更好的正则表达式。

if (jQuery.browser.msie && jQuery.browser.version === '9.0') 
{ 
    data = data.replace(/>\s+(?=<\/?(t|c)[hardfob])/gm,'>'); 
} 

覆盖所有的表,字幕,COLGROUP,山口,TBODY,THEAD,TFOOT,TR,TD,th元素。

0

按照Krummelz的建议,加入<meta http-equiv="X-UA-Compatible" content="IE=8" />会使问题消失。

对于我的具体问题,我有一个jQuery日期选择器和常规标签,在IE9中呈现正确,但在jquery ajax调用后会下移到数据中。把上面的标签修复它给我。这是值得一试的。祝你好运。

0

白色间距也是我的问题,虽然我的情况有点不同。这个线程帮助我解决了这个问题(谢谢大家)。

我的表会很好,然后在回发后随机添加一列。这里是我的代码之前和之后:

之前:除去行(:(我有大约10人被格式化以同样的方式并未导致此问题,但这次是)

<tr> 
    <th class="width125px th-left-borders"> 
     Intangibles 
    </th> 
    <td><asp:TextBox ID="txtCustFinancial_Intangibles" runat="server" 
      CssClass="textToLabel widthFull textbox_number_align"></asp:TextBox> 
    </td> 
</tr> 

后休息通常很好,但由于某种原因,这是一个问题)

<tr> 
    <th class="width125px th-left-borders">Intangibles</th> 
    <td><asp:TextBox ID="txtCustFinancial_Intangibles" runat="server" 
      CssClass="textToLabel widthFull textbox_number_align"></asp:TextBox></td> 
</tr> 

希望这也能帮助别人。