我有一个带有几个子节点的documentFragment,其中包含一些.data(),如下所示:
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(true)
$(globalObj).data('fragment', { frag: $(mydocumentFragment).clone(true) });
$(myDocumentFragment).clone(true).appendTo('#div');
alert( $('#div a:first').data('rowData').id ); // undefined
答案 0 :(得分:0)
当您执行$('a')
时,您正在创建一个jQuery对象,但是当您使用get(0)
并使用appendChild
将其附加到您的片段时,您将其遗忘。因此,如果您在片段上使用本机.cloneNode(true)
,则jQuery不会意识到它,因此不会为您管理数据。
只要你正在为你正在做的大部分事情使用jQuery,我就会抛弃documentFragment,只将你的a
元素填充到jQuery对象中,然后clone()
在这种情况下,我不认为你通过使用片段获得任何东西。