-1

DOM 要素の参照を返すカスタム メソッドを作成していますが、Chrome、Firefox、Safari などのすべての最新のブラウザーで動作するようですが、IE 9 では失敗します。返された要素は定義されていません。違う

var searchEle = function (parent, ref) {
var refEle;
if (typeof document.getElementByClassName === "function") {
    if (ref.substr(0, 1) === ".") {
        refEle = parent.getElementsByClassName(ref.replace(".", ""));
    } else {
        refEle = parent.getElementsByTagName(ref);
    }
} else {
    if (ref.substr(0, 1) === "#") {
        refEle = parent.getElementById(ref.replace("#", ""));
    } else if (ref.substr(0, 1) === ".") {
        refEle = parent.querySelector(ref);
    }
}
return refEle;
};

ここで IE9 のデモをチェックしてください: http://jsbin.com/ubokop/5/edit

ありがとう

4

1 に答える 1

1

まず最初に、この polyfill を に使用しますgetElementsByClassName。実際にはこれが必要な唯一の関数だからです。完璧ではありませんが、十分に近いです。

// Add a getElementsByClassName function if the browser doesn't have one
// Limitation: only works with one class name
// Copyright: Eike Send http://eike.se/nd
// License: MIT License
if (!document.getElementsByClassName) {
    document.getElementsByClassName = function(search) {
        var d = document, elements, pattern, i, results = [];
        if (d.querySelectorAll) { // IE8
            return d.querySelectorAll("." + search);
        }
        if (d.evaluate) { // IE6, IE7
            pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
            elements = d.evaluate(pattern, d, null, 0, null);
            while (i = elements.iterateNext()) {
                results.push(i);
            }
        } else {
            elements = d.getElementsByTagName("*");
            pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
            for (i = 0; i < elements.length; i++) {
                if ( pattern.test(elements[i].className) ) {
                    results.push(elements[i]);
                }
            }
        }
        return results;
    }
}

(このポリフィルのソース)

次に、これで十分です。

var searchEle = function (ref) {
    if (ref.charAt(0) === "#") {
        return document.getElementById(ref.substr(1));
    }else if (ref.charAt(0) === ".") {
        return document.getElementsByClassName(ref.substr(1));
    }else{
        return document.getElementsByTagName(ref);
    }
};
于 2013-02-08T12:47:37.183 に答える