0

私は多くのデバッグを行いましたが、エラーが発生するようです I try to use "this" in ae2Multi().

<html><head>
<title>Custom</title>
<style type="text/css"></style>
<script type="text/javascript">
    function ae2(elementName) {
        var elementObject;
        var elementType = elementName.charAt(0);

        if(elementType == "#") {
            elementObject = document.getElementById(elementName.substr(1));
        } else if(elementType == ".") {
            elementObject = document.getElementsByClassName(elementName.substr(1));
        } else {
            elementObject = document.getElementsByTagName(elementName);
        }
        return elementObject;
    }

    function ae2Single() {
        this.innerHTML = "singleIsWorking";
    }

    function ae2Multi() {
        alert(this);
        for (var i = 0; i < this.length; i++) {
            this[i].innerHTML = "it really worked!";
        }
    }

    Element.prototype.ae2Single = ae2Single;
    Element.prototype.ae2Multi = ae2Multi;

    window.onload = function() {
        ae2(".container").ae2Multi();
    }
</script></head><body><div id="containerMain">hello world!</div><div class="container">hello again!</div><div class="container">hello yet again!</div></body</html>
4

2 に答える 2

2

複数の要素を選択すると、NodeListではなくが返されますElementNodeListしたがって、プロトタイプを編集する必要があります。

Element.prototype.ae2Single = ae2Single;
NodeList.prototype.ae2Multi = ae2Multi;

getElementByIdを返すのは だけのElementようですが、残りは a を返しますNodeList

于 2012-11-24T03:06:10.987 に答える
0

誰かがあなたの手を切り落とすと脅していても、そうしない限り、ネイティブ オブジェクトのプロトタイプを拡張しないでください。

編集:「両方を行うために1つの関数を書く方法はありますか」と尋ねたので、この回答を提供します

function ae2(elementName) {
    var elementObject;
    var elementType = elementName.charAt(0);

    if(elementType == "#") {
        elementObject = document.getElementById(elementName.substr(1));
    } else if(elementType == ".") {
        elementObject = document.getElementsByClassName(elementName.substr(1));
    } else {
        elementObject = document.getElementsByTagName(elementName);
    }

    if(elementObject.length === 1){
        //ae2Single
        elementObject.innerHTML = "singleIsWorking";
    }
    else if(elementObject.length > 1){
        //ae2Multi
        for (var i = 0; i < elementObject.length; i++) {
            elementObject[i].innerHTML = "it really worked!";
        }
    }

}
于 2012-11-24T05:13:41.343 に答える