Задача непростая. Создать NodeList просто так нельзя, только браузер это умеет. А если ваш элемент в странице, то и вложить его в собстенный контейнер мы не можем, ибо можно что-нибудь сломать. Я бы наверное предложил такой грязный метод:
function wrap(element) {
var parent = element.parentNode;
var pos = Array.prototype.slice.call(parent.children).indexOf(element) + 1
return parent.querySelectorAll(':scope > :nth-child(' + pos + ')')
}
Он полагается на наличие :scope, который есть не во всех браузерах. Альтернатива, которая меняет DOM, но зато будет работать на большем числе компьютеров:
function wrap(element) {
var token = ('data-t' + Math.random()).replace('.', '-')
element.setAttribute(token, 1)
var list = element.parentNode.querySelectorAll('[' + token + ']')
element.removeAttribute(token)
return list
}
UPD:
Очевидно, оба метода полагаются на то, что у элемента есть родитель. Если его нет, то можно создать ему обертку и вернуть ее свойство children.