ホームページ  >  記事  >  ウェブフロントエンド  >  要素セレクター

要素セレクター

WBOY
WBOYオリジナル
2016-06-21 08:49:581251ブラウズ

わずか数行のコードで、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 要素を取得したい場合、上記のコードはこれを実行します。

  • すべての .box .item a.pink 要素に { Barret: Lee; } CSS スタイルを追加します
  • すべての要素を走査して、Barret CSS 属性を含む要素を見つけます
  • 属性

IE8 は少し問題があるため、いくつかの小さな問題を修正する必要があります。 ソース コードのアドレス:

  • git clone https://github.com/barretlee/MiniQuery
  • npm install ミニクエリ

コード プレビュー:

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;};

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。