NickFitz прав, DocumentFragment
не имеет API вы ожидаете от Document
или Element
, в стандарте или в браузерах (что это позор, это было бы очень удобно иметь возможность установить fragment innerHTML
.
Даже фреймворки не помогут вам здесь, так как они, как правило, требуют наличия узлов в документе или иным образом используют методы на узле контекста, которые не существуют на фрагментах. Возможно, вам придется писать ваш собственный, например:
function Node_getElementById(node, id) {
for (var i= 0; i<node.childNodes.length; i++) {
var child= node.childNodes[i];
if (child.nodeType!==1) // ELEMENT_NODE
continue;
if (child.id===id)
return child;
child= Node_getElementById(child, id);
if (child!==null)
return child;
}
return null;
}
Было бы почти наверняка лучше отслеживать ссылки, когда вы идете вперед, чем полагаться на наивную, плохо выполняющую функцию, такую как выше.
var frag= document.createDocumentFragment();
var mydiv= document.createElement("div");
mydiv.id= 'myId';
frag.appendChild(mydiv);
// keep reference to mydiv
Этот вопрос задан в 2009 году. __В 2012 году у нас есть querySelectorAll, который работает с фрагментами документов. См. Ответ @ Стивена ниже. – mikemaccana