javascript - IE7 : How do I create a real NodeList?

标签 javascript dom internet-explorer-7 nodelist qsa

我正在尝试使我当前的项目兼容 IE7。我们没有使用 jQuery,而是使用 querySelectorAll 来满足我们的选择器需求。但是,IE7 不支持 querySelectorAll,因此我使用 https://gist.github.com/868532 中的代码对其进行了猴子修补。 。它实际上工作得很好,除了一个小区别:它返回一个数组,而不是像原始 querySelectorAll 那样的 NodeList。由于我希望尽可能保持兼容性,因此我想让该函数返回一个 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 中吗?

最佳答案

我认为这是不可能的。

IE7 能够生成的 NodeList 实例是实时 NodeList。但是,querySelectorAll 方法被定义为返回静态 NodeList 实例。我不相信 IE7 知道静态 NodeList 是什么 - 这些(据我所知)仅在 Selectors API 中引入。

Read about live NodeLists and static NodeLists here.

关于javascript - IE7 : How do I create a real NodeList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5678446/

相关文章:

javascript - 如何向 .apply() 方法添加回调?

javascript - 复选框值始终为 'on'

javascript - 通过 JavaScript 分配时,CSS 转换不起作用

javascript - 如何使用事件监听器向对象数组添加新元素并将其显示在 html 页面上

javascript - DOM Range 对象可以在开始之前结束吗?

asp.net - Response.StatusCode 和 Internet Explorer - 显示自定义消息?

IE7 和 IE8 中的 JavaScript 错误 : SCRIPT5007: Unable to get the value of property 'newQuestion' : object is null or undefined

jquery - IE7 : CSS & jQuery: dragging up, 拖动项在最上面,向下拖动 : dragged item is below. 如何让两者都在最上面?

javascript - 初始化后重置 jQueryUI 步骤

javascript - 如何在指令的 Controller 中访问父 Controller 的范围?