2013-02-06 79 views
0

鑑於表這個第n行,可以jQuery的只添加標記關閉表jquery只能添加結束元素標記(標記)嗎?

 <tr class="eop"> 
      <td> 8/31 </td> 
      <td> XYZ </td> 
      <td> 2 </td> 
      <td> 92.00 </td> 
     </tr> 

    </tbody>   -- 
</table>     | 
<table>     --  // inserted markup 
    head jquery var  | 
    <tbody>    -- 

我想要是使用:

$('tr.eop').append("</tbody></table><table>+head+<tbody>"); // head = table header 
+2

不,不是真的!如果您使用的是DOM插入方法等,則可以使用整個DOM元素進行有效標記。 – adeneo

+1

由於jQuery操縱DOM並且DOM由對象組成,因此不可能使用Javascript/jQuery插入html片段。 – Horen

回答

3

DOM由元素節點組成,打開和關閉標記意味着什麼,一旦元素是DOM或DOM片段的一部分。

您不能將元素附加到沒有結束標記的頁面。如果省略了結束標記,則會爲您創建一個標記。您也不能通過將結束標籤附加爲子對象來關閉父元素,而只是在父元素內創建一個新的完整元素。

如果要創建新表,請創建一個新表。

var newTable = $("<table><thead>"+head+"</thead><tbody></tbody></table>"); 
$('tr.eop').closest("table").after(newTable) 
$('tr.eop').nextAll().appendTo(newTable.find("tbody")); 
+0

聲音像一個很好的解釋。我需要一些來處理這個。謝謝。 – David

+0

這很好。我可以編輯插入'「+ head +」'到第一行嗎? – David

+0

@DavidC像這樣? –

0

請試試這個。看看它是否有效。

var tt = $('tr.eop'); 
tt.innerHTML = tt.innerHTML + '</tbody></table><table>'+head+'<tbody>'; 
+0

不,它不起作用,因爲第二個'innerHTML'產生'undefined'。 – David

0

如果沒有一個很好的做法,但它的工作原理(我不知道,如果它可以在某一時刻失敗),看看這個例子:

http://jsfiddle.net/MKSqy/

然而我不確定你想要完成什麼,你可以通過操縱DOM樹來輕鬆完成類似的事情。或者改變你創建應用程序的方式,而不是使用表格使用div,並創建一個隱藏或當你想要顯示。

<div class="table"> 
    <div class="row"> 
     <div>8/31</div> 
     <div> XYZ </div> 
     <div> 2 </div> 
     <div> 92.00 </div> 
    </div> 
    <div class="head" style="visible:none;"></div> 
</div> 

並操縱css來創建表格樣式。我建議這只是爲了方便,但標記存在的原因,你不應該濫用divs

編輯:我不很瞭解,所以這是你所需要的

http://jsfiddle.net/MKSqy/1/

這裏做的事情基本上是選擇的第n個元素之後的下一個元素,並創建一個表,並追加它旁邊到這個前衛的桌子。所以你不必處理關閉標籤。

+0

這個jsfiddle例子很有趣。我看不出它是如何工作的...這個問題的目標是拆分一個長表,可能需要2個打印頁面。 – David

+0

如果你檢查元素,你會發現它真正在做的是在td中插入一個新表,而不是創建一個新表。 –

+0

是的,我的壞,我不明白,代碼沒有按預期工作(comboooo-breaker)檢查另一個可能有所幫助的解決方案: http://jsfiddle.net/MKSqy/1/ –