Я пытаюсь сделать мой текущий проект IE7-совместимым. Мы не используем jQuery, но вместо этого используем querySelectorAll
для наших селекторных нужд. Тем не менее, IE7 не поддерживает querySelectorAll
, поэтому я пропатчил его с помощью кода из https://gist.github.com/868532. На самом деле он работает нормально, за исключением одного небольшого различия: вместо NodeList
, как в оригинале querySelectorAll
, он возвращает массив. Поскольку я хотел бы быть максимально совместимым, я хотел, чтобы эта функция возвращала NodeList
. Используя какой-то метод, найденный в сети, я адаптировал суть к этому:
(function(d) {
d=document, a = d.styleSheets[0] || d.createStyleSheet();
if (! vxJS.isHostMethod(d, 'querySelectorAll')) {
d.querySelectorAll = function(e) {
a.addRule(e,'f:b');
for (var l=d.all, b=0, c=d.createDocumentFragment(),f=l.length; b<f; b++) {
l[b] && l[b].currentStyle.f && c.appendChild(l[b].cloneNode(true));
}
a.removeRule(a.rules.length - 1);
return c.childNodes;
};
}
})();
Моя проблема с этим кодом заключается в том, что appendChild
удаляет узел из его исходного местоположения в дереве DOM, поэтому я попытался создать клон с cloneNode
, который, очевидно, создает допустимые клоны узлов, которые не являются исходными узлами и, таким образом, нельзя использовать в дальнейшем коде.
Можно ли как-нибудь поместить ссылку на реальный узел в NodeList?