2010-05-14 47 views
1

我有包含若干。數據(幾個子節點的DocumentFragment)添加像這樣:documentFragment.cloneNode(真)並不克隆jQuery的數據


myDocumentFragment = document.createDocumentFragment(); 
for(...) { 
    myDocumentFragment.appendChild(
    $('<a></a>').addClass('button') 
     .attr('href', 'javascript:void(0)') 
     .html('click me') 
     .data('rowData', { 'id': 103, 'test': 'testy' }) 
     .get(0) 
); 
} 

當我嘗試將DocumentFragment的追加到一個div在頁面上:

$('#div').append(myDocumentFragment);

我可以訪問數據就好了:

alert($('#div a:first').data('rowData').id); // alerts '103' 

但如果我克隆節點使用cloneNode(true),我無法訪問節點的數據。 :(

$('#div').append(myDocumentFragment.cloneNode(true)); 
... 
alert($('#div a:first').data('rowData').id); // alerts undefined 

有沒有其他人這樣做或知道一種解決方法嗎?我想我可以行的數據存儲在jQuery.data('#some_random_parent_div', 'rows', [array of ids]),但還挺失敗使得立刻/輕易提供給每一行數據的目的。

我也讀了jQuery使用documentFragments,但我不知道究竟如何,或者什麼方法有沒有人有任何更多的細節有

編輯回覆:?.clone(真)


$(globalObj).data('fragment', { frag: $(mydocumentFragment).clone(true) }); 

$(myDocumentFragment).clone(true).appendTo('#div'); 

alert($('#div a:first').data('rowData').id); // undefined 
+0

'$('')'做什麼?你不是在那裏創造一個元素,所以我不知道期望什麼樣的行爲... – 2010-05-14 02:08:27

+0

@Nick - 我認爲它是一個錯字。在前幾天的一個問題中,他使用'$('')'。 – user113716 2010-05-14 02:16:56

+0

是的,堆棧溢出在那裏吃了一個標籤,哎呀。 – taber 2010-05-14 02:19:30

回答

0

當你做$('a')時,你正在創建一個jQuery對象,但是當你使用get(0)並且使用appendChild將它附加到你的片段時,你將會把它留下。因此,如果您在片段上使用本地.cloneNode(true),那麼jQuery並不知道它,因此不會爲您管理數據。

只要你正在使用jQuery處理你正在做的大部分工作,我會拋棄documentFragment,並將你的a元素填充到一個jQuery對象中,然後將clone()填入。

我不認爲你在這種情況下通過使用片段獲得任何東西。

+0

感謝這可能是我最終會做的,我即將放棄:) – taber 2010-05-14 02:32:49

+0

是的,如果你打算使用'.data()',你應該計劃繼續使用jQuery。如果沒有它,你就會有更輕鬆的時間。 – user113716 2010-05-14 02:38:08

+0

爲真。好吧,擰它。 :)無論如何感謝您的幫助,我很感激。在旁註中,我嘗試了$ list = $({});並得到一個錯誤,說doc.createDocumentFragment不是在jquery-1.4.2.js中的函數 - 所以如果我改變它$('

')它看起來像他們無論如何都使用documentFragments!涼。再次感謝。 – taber 2010-05-14 03:00:21