2011-04-08 71 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>");