1

現在のプロジェクトを IE7 互換にしようとしています。jQuery は使用していませんが、代わりにquerySelectorAllセレクターのニーズに使用しています。ただし、IE7 は をサポートしていないため、 https://gist.github.com/868532querySelectorAllのコードでモンキー パッチを適用しました。1 つの小さな違いを除いて、実際には問題なく動作します。元の のようなa ではなく、配列を返します。できるだけ互換性を保ちたいので、その関数が. ネットで見つかったいくつかの方法を使用して、要点をこれに適合させました。NodeListquerySelectorAllNodeList

(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 に入れる方法はありますか?

4

2 に答える 2

0

おそらく、item() メソッドを追加することで、NodeList を模倣した配列を作成できます。

if (!Array.prototype.item) {
    Array.prototype.item = function (i) {
        "use strict";

        return this[i];
    };
}
于 2012-02-24T13:00:09.180 に答える
0

私はそれができるとは思わない。

IE7 が生成できる NodeList インスタンスは、ライブ NodeList です。ただし、querySelectorAllメソッドは静的な NodeList インスタンスを返すように定義されています。私は IE7 が静的な NodeList が何であるかを知っているとは信じていません - それらは (afaik) セレクター API でのみ導入されました。

ライブ NodeList と静的 NodeList については、こちらをご覧ください。

于 2011-04-15T21:24:38.393 に答える