2011-04-08 105 views
2

我不太清楚我在做什么错误,并且没有任何迹象表明这不应该在IE中工作。但下面的代码不在<dd>元件。经过()添加到DOM:jQuery。未添加IE7/IE8中的元素

shouts_list_selector = $("#shouts dl#shouts_list"); 

shout_object = $('<dt>') 
      .attr('id', shout.id) 
      .text(shout.name) 
      .append($('<span>').addClass('separator').text(' : ')) 
      .append($('<abbr>').addClass('timestamp').attr('title', shout.timestamp).text(shout.when)) 
      .after($('<dd>').html(shout.message)) 

shout_object.prependTo(shouts_list_selector).slideDown('slow', 'swing'); 

喊声是含有一些消息的对象。这在Firefox和Chrome中运行良好。但IE浏览器缺少<dd>元素。这个例子有什么问题吗?或者有更好的方法来做到这一点?

编辑:下面是该问题的一个例子:在Firefox或Chrome运行时http://jsfiddle.net/sx6YH/

的DD标签正确显示。但不在IE中。

+0

也许'$( '

')。html的(' 喊消息'),'??? – 2011-04-08 05:58:27

+0

@experimentx,jquery在传递字符串开始标记时创建一个新元素,因此结束标记不是必需的。 – 2011-04-08 06:01:09

+0

@nathanconzalez和关于'$()。表情符号(shout.message)'??? – 2011-04-08 06:02:09

回答

1

我能够仅通过创建<dd>标签和appendingTo将得到这个工作列表中的<dt>像这样之后:

shouts_list = $('<dl>').attr('id', 'shouts_list'); 

$.each(shouts_object.shouts, function(id, shout) { 
    $('<dt>') 
     .attr('id', shout.id) 
     .text(shout.name) 
     .append($('<span>') 
       .text(' : ')) 
     .append($('<abbr>') 
       .attr('title', shout.timestamp) 
       .text(shout.when)) 
     .appendTo(shouts_list); 
    $('<dd>').html(shout.message) 
     .appendTo(shouts_list); 
}); 

shouts_list.appendTo('#shouts'); 

这两个IE8和Firefox正常工作。我觉得可能会有一个IE8中的错误与处理.after

0

<dd>元素不显示的原因是因为您正在创建无效的html。您当前的代码生成的HTML被解析为:

<dt id="1"> 
    test 
    <span class="separator"> : </span> 
</dt> 
<dd>hello</dd> 

<dd>显然应该是<dt>内。

你的代码应该是这样的:

shout_object = $('<dt>') 
     .attr('id', shout.id) 
     .text(shout.name) 
     .append($('<span>').addClass('separator').text(' : ')) 
     .append($('<abbr>').addClass('timestamp').attr('title', shout.timestamp).text(shout.when)) 
     .append($('<dd>').html($().emoticon(shout.message))) 

那么你的HTML将被罚款并呈现在IE7/8

+1

根据标准,它看起来像'

'标签应该在标签之外,而不是在'
'标签内。'
'是术语(在这种情况下是名称),'
'是消息。另外要注意的是,在代码(无效或注释)后面使用。似乎并未插入到DOM中(使用IE调试工具进行查看时)。 – 2011-04-08 16:24:36

2

我发现这是一个嵌套的append的原因。 IE8似乎无法正确处理这些问题。我有同样的问题,@Andy Shinn让我朝着正确的方向前进。在我来说,我是想添加一个链接到一个未排序:

<ul id=menu></ul> 

有以下的jQuery:

$("ul[id=menu]").append("<li><a href='test.html'>test</a></li>"); 

这在大多数的浏览器,但不 IE8。如果将它们添加嵌套的,它的工作:

$("ul[id=menu]").append("<li/>").html("<a href='test.html'>test</a>");