ホームページ ウェブフロントエンド jsチュートリアル js で CSS スタイル セレクターを実装 (圧縮後 2KB)_javascript スキル

js で CSS スタイル セレクターを実装 (圧縮後 2KB)_javascript スキル

May 16, 2016 pm 05:57 PM
セレクタ

最近、ページ コードをより適切に管理するために、js セレクターを作成したいと思って、オンラインで検索しました。優れたパフォーマンスを備えたミニ CSS セレクター: 次のコードは圧縮されており、わずか 2 KB です。

コードをコピー コードは次のとおりです。

var $=(function(){var b=/ (?:[w-\.#] ) (?:[w ?=(['"])?(?:\1|.) ?1])?|*|>/ig,g =/^ (?:[w-_] )?.([w-_] )/,f=/^(?:[w-_] )?#([w-_] )/,j=/ ^([ w*-_] )/,h=[null,null];function d(o,m){m=m||document;var k=/^[w-_#] $/.test( o); if(!k&&m.querySelectorAll){return c(m.querySelectorAll(o))}if(o.indexOf(",")>-1){var v=o.split(/,/g) ,t= [],s=0,r=v.length;for(;s

元のバージョンを共有します:
コードをコピーしますコードは次のとおりです:

/**
* "mini" Selector Engine
* Copyright (c) 2009 James Padolsey
* -------------------------------------------------------
* Dual licensed under the MIT and GPL licenses.
* - http://www.opensource.org/licenses/mit-license.php
* - http://www.gnu.org/copyleft/gpl.html
* -------------------------------------------------------
* Version: 0.01 (BETA)
*/
var mini = (function(){
var snack = /(?:[w-\.#] ) (?:[w ?=(['"])?(?:\1|.) ?1])?|*|>/ig,
exprClassName = /^(?:[w-_] )?.([w-_] )/,
exprId = /^(?:[w-_] )?#([w-_] )/,
exprNodeName = /^([w*-_] )/,
na = [null,null];
function _find(selector, context) {
/**
* This is what you call via x() This is what you call via x
* Starts everything off... Start on everything
*/
context = context || document;
var simple = /^[w-_#] $/.test(selector);
if (!simple && context.querySelectorAll) {
return realArray(context.querySelectorAll(selector));
}
if (selector.indexOf(',') > -1) {
var split = selector.split(/,/g), ret = [], sIndex = 0, len = split.length;
for(; sIndex < len; sIndex) {
ret = ret.concat( _find(split[sIndex], context) );
}
return unique(ret);
}
var parts = selector.match(snack),
part = parts.pop(),
id = (part.match(exprId) || na)[1],
className = !id && (part.match(exprClassName) || na)[1],
nodeName = !id && (part.match(exprNodeName) || na)[1],
collection;
if (className && !nodeName && context.getElementsByClassName) {
collection = realArray(context.getElementsByClassName(className));
} else {
collection = !id && realArray(context.getElementsByTagName(nodeName || '*'));
if (className) {
collection = filterByAttr(collection, 'className', RegExp('(^|\s)' className '(\s|$)'));
}
if (id) {
var byId = context.getElementById(id);
return byId?[byId]:[];
}
}
return parts[0] && collection[0] ? filterParents(parts, collection) : collection;
}
function realArray(c) {
/**
* Transforms a node collection into Transforms a node collection
* a real array A real array
*/
try {
return Array.prototype.slice.call(c);
} catch(e) {
var ret = [], i = 0, len = c.length;
for (; i < len; i) {
ret[i] = c[i];
}
return ret;
}
}
function filterParents(selectorParts, collection, direct) {
/**
* This is where the magic happens.
* Parents are stepped through (upwards) to
* see if they comply with the selector. Device
*/
var parentSelector = selectorParts.pop();
if (parentSelector === '>') {
return filterParents(selectorParts, collection, true);
}
var ret = [],
r = -1,
id = (parentSelector.match(exprId) || na)[1],
className = !id && (parentSelector.match(exprClassName) || na)[1],
nodeName = !id && (parentSelector.match(exprNodeName) || na)[1],
cIndex = -1,
node, parent,
matches;
nodeName = nodeName && nodeName.toLowerCase();
while ( (node = collection[ cIndex]) ) {
parent = node.parentNode;
do {
matches = !nodeName || nodeName === '*' || nodeName === parent.nodeName.toLowerCase();
matches = matches && (!id || parent.id === id);
matches = matches && (!className || RegExp('(^|\s)' className '(\s|$)').test(parent.className));
if (direct || matches) { break; }
} while ( (parent = parent.parentNode) );
if (matches) {
ret[ r] = node;
}
}
return selectorParts[0] && ret[0] ? filterParents(selectorParts, ret) : ret;
}
var unique = (function(){
var uid = new Date();
var data = (function(){
var n = 1;
return function(elem) {
var cacheIndex = elem[uid],
nextCacheIndex = n ;
if(!cacheIndex) {
elem[uid] = nextCacheIndex;
return true;
}
return false;
};
})();
return function(arr) {
/**
* Returns a unique array Returns a unique array
*/
var length = arr.length,
ret = [],
r = -1,
i = 0,
item;
for (; i < length; i) {
item = arr[i];
if (data(item)) {
ret[ r] = item;
}
}
uid = 1;
return ret;
};
})();
function filterByAttr(collection, attr, regex) {
/**
* Filters a collection by an attribute. A collection filter by an attribute
*/
var i = -1, node, r = -1, ret = [];
while ( (node = collection[ i]) ) {
if (regex.test(node[attr])) {
ret[ r] = node;
}
}
return ret;
}
return _find;
})();

以上代码支持css风格样式写法包括:
复制代码 代码如下:

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CSSのIDセレクターの識別子は何ですか CSSのIDセレクターの識別子は何ですか Sep 22, 2022 pm 03:57 PM

CSSのIDセレクターの識別子は何ですか

:nth-child(n+3) 擬似クラス セレクターを使用して、位置が 3 以上の子要素のスタイルを選択します。 :nth-child(n+3) 擬似クラス セレクターを使用して、位置が 3 以上の子要素のスタイルを選択します。 Nov 20, 2023 am 11:20 AM

:nth-child(n+3) 擬似クラス セレクターを使用して、位置が 3 以上の子要素のスタイルを選択します。

css擬似セレクター学習擬似クラスセレクター解析 css擬似セレクター学習擬似クラスセレクター解析 Aug 03, 2022 am 11:26 AM

css擬似セレクター学習擬似クラスセレクター解析

初心者から熟練者まで: is セレクターと where セレクターの使用スキルをマスターする 初心者から熟練者まで: is セレクターと where セレクターの使用スキルをマスターする Sep 08, 2023 am 09:15 AM

初心者から熟練者まで: is セレクターと where セレクターの使用スキルをマスターする

JavaScript セレクターが失敗した場合の対処方法 JavaScript セレクターが失敗した場合の対処方法 Feb 10, 2023 am 10:15 AM

JavaScript セレクターが失敗した場合の対処方法

CSS のセレクターにはハイパーテキスト タグ セレクターが含まれますか? CSS のセレクターにはハイパーテキスト タグ セレクターが含まれますか? Sep 01, 2022 pm 05:25 PM

CSS のセレクターにはハイパーテキスト タグ セレクターが含まれますか?

wxss セレクターとは何ですか? wxss セレクターとは何ですか? Sep 28, 2023 pm 04:27 PM

wxss セレクターとは何ですか?

is および where セレクターの詳細な分析: CSS プログラミング レベルの向上 is および where セレクターの詳細な分析: CSS プログラミング レベルの向上 Sep 08, 2023 pm 08:22 PM

is および where セレクターの詳細な分析: CSS プログラミング レベルの向上

See all articles