ホームページ > 記事 > ウェブフロントエンド > 要素セレクター
わずか数行のコードで、IE の下位バージョンと互換性のある単純な要素セレクターが実装されます。
IE8 以降、querySelector と querySelectorAll という 2 つの非常に便利なセレクター関数がサポートされており、下位バージョンのブラウザーを考慮しなければ、基本的に日常のニーズを満たすことができます。互換性のある低バージョンのブラウザでは、いくつかのハッキングが使用できます。
原理は比較的単純です。CSS ルールを通じてターゲット要素に特殊な属性を追加し、すべての要素を走査して特殊な属性を持つ要素を見つけます。もちろん、それらの特殊な属性を見つけたら、これらの特殊な属性を削除します。
var firstStyleSheet = document.styleSheets[0] || document.createStyleSheet(); firstStyleSheet.addRule(query, 'Barret:Lee');for (var i = 0, len = document.all.length; i < len; i++) { var item = document.all[i]; item.currentStyle.Barret && res.push(item);}firstStyleSheet.removeRule(0);
たとえば、 .box .item a.pink 要素を取得したい場合、上記のコードはこれを実行します。
IE8 は少し問題があるため、いくつかの小さな問題を修正する必要があります。 ソース コードのアドレス:
コード プレビュー:
function $(query) { var res = []; if (document.querySelectorAll) { res = document.querySelectorAll(query); } else { var firstStyleSheet = document.styleSheets[0] || document.createStyleSheet(); firstStyleSheet.addRule(query, 'Barret:Lee'); for (var i = 0, len = document.all.length; i < len; i++) { var item = document.all[i]; item.currentStyle.Barret && res.push(item); } firstStyleSheet.removeRule(0); } if(res.item) { /* Fuck IE8 */ var ret = []; for(var i = 0, len = res.length; i < len; i++){ ret.push(res.item(i)); } res = ret; } return res;};