2

Node.prototype.appendChild(obj)が呼び出されたときにメッセージを警告するために、次のコードを記述しました。

var _appendChild = Node.prototype.appendChild;
Node.prototype.appendChild = function(object){
    alert("append");
    return _appendChild.apply(this,[object]);           ;
};  

そしてそれはIE8では動作しません。

IEでプロトタイプ関数をオーバーライドできないという回答が記載されているこのリンクを読みました

javascriptのcloneNodeをオーバーライドするにはどうすればよいですか?

しかし、私はまだ私がやりたいことをするための回避策があるかどうか尋ねたいと思います。

ありがとう

4

2 に答える 2

3

IE8ではNodeを拡張できませんが、HTMLDocument.prototypeとElement.prototypeを拡張することはできます。

Microsoftのドキュメントへのリンク

function _MS_HTML5_getElementsByClassName(classList){
    var tokens= classList.split(" ");
    var staticNodeList= this.querySelectorAll("." + tokens[0]);
    for(var i= 1; i<tokens.length; i++){
        var tempList= this.querySelectorAll("." + tokens[i]);           
        var resultList= new Array();
        for(var finalIter= 0; finalIter<staticNodeList.length; finalIter++){
            var found= false;
            for(var tempIter= 0; tempIter<tempList.length; tempIter++){
                if(staticNodeList[finalIter]== tempList[tempIter]){
                    found= true;
                    break;                      
                }
            }
            if(found){
                resultList.push(staticNodeList[finalIter]);
            }
        }
        staticNodeList= resultList;
    }
    return staticNodeList;
}

if(!document.getElementsByClassName && Element.prototype){
    HTMLDocument.prototype.getElementsByClassName= _MS_HTML5_getElementsByClassName;
    Element.prototype.getElementsByClassName= _MS_HTML5_getElementsByClassName;
}
于 2012-05-30T02:48:06.247 に答える
1

ありがとうkennebec

最後に、クァークズモードで実行されているという理由だけで実装できないことがわかりました...他の誰かが興味を持っているかもしれない例を書きました。

var elementPrototype = typeof HTMLElement !== "undefined"
        ? HTMLElement.prototype : Element.prototype;

var _appendChild = elementPrototype.appendChild; 

elementPrototype.appendChild = function(content){
    //Do what you want-----

    alert("Append Child!");

    //---------------------
    return _appendChild(content);
}
于 2012-06-04T04:53:47.193 に答える