EDIT:
как насчет чего-то простого по этим направлениям:
DocumentFragment.prototype.getElementById = function(id) {
for(n in this.childNodes){
if(id == n.id){
return n;
}
}
return null;
}
Почему бы просто не использовать jQuery или API выбора в любой другой используемой вами библиотеке? AFAIK все основные библиотеки поддерживают отбор по фрагментам.
Если вы хотите пропустить большую библиотеку, такую как jQ / Prototype / Dojo / и т.д .., тогда вы можете просто использовать Sizzle - это механизм выбора, который поддерживает jQ и Dojo, и предлагается как автономный. Если и об этом не может быть и речи, тогда я полагаю, что вы могли бы погрузиться в источник Sizzle и посмотреть, что происходит. В целом, хотя кажется, что нужно приложить немало усилий, чтобы избежать нескольких сотен тысяч килобайт с добавленной вероятностью того, что код, который вы создадите, будет медленнее во время выполнения, чем вся работа, выполняемая в Sizzle или другой библиотеке с открытым исходным кодом.
http://sizzlejs.com/
О, также ... я думаю (догадываясь), хитрость jQ в том, что элементы не выходят из DOM. Я могу ошибаться, но я думаю, когда вы делаете что-то вроде:
$('<div></div>');
На самом деле он находится в документе DOM, но не является частью узлов body / head. Хотя это может быть совершенно неверным, это всего лишь предположение.
Так что вы меня любопытно хаха. Я взглянул на шипение .. чем ответ - его не используют методы DOM. Кажется, он использует алгоритм, который сравнивает различные свойства DOMNode, сопоставленные с типами селекторов - если только я не пропускаю что-то ... что вполне возможно :-)
Однако, как отмечено ниже в комментариях, кажется, что Sizzle НЕ работает с DocumentFragments ... Итак, вернемся к исходной точке: -)