js 实现css风格选择器(压缩后2KB)_javascript技巧
近日在做一些OA前端界面,为了更好管理页面代码想写个js选择器,写着写着发现很费力,索性在网上找找看,功夫不负有心人, 找到一个mini css选择器,且性能不凡:以下代码是压缩后的,仅2KB。
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() 这是你们所谓的经x
* Starts everything off... 开始上所有的
*/
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 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 转换一个节点收藏
* a real array 一个真正的阵列
*/
try {
return Array.prototype.slice.call(c);
} catch(e) {
var ret = [], i = 0, len = c.length;
for (; 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. 看看他们是否符合选择器
*/
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返回一个独特的阵列
*/
var length = arr.length,
ret = [],
r = -1,
i = 0,
item;
for (; 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. 一个收集过滤器一个属性
*/
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 > * span

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In CSS ist die Kennung des ID-Selektors „#“. Sie können einen bestimmten Stil für das HTML-Element angeben, das mit einem bestimmten ID-Attributwert markiert ist. Die Syntaxstruktur ist „#ID-Wert {Attribut: Attributwert;}“. Das ID-Attribut ist auf der gesamten Seite eindeutig und nicht wiederholbar; der ID-Attributwert sollte nicht mit einer Zahl beginnen. IDs, die mit Zahlen beginnen, funktionieren in Mozilla/Firefox-Browsern nicht.

Verwenden Sie den Pseudoklassenselektor :nth-child(n+3), um den Stil untergeordneter Elemente auszuwählen, deren Position größer oder gleich 3 ist. Das spezifische Codebeispiel lautet wie folgt: HTML-Code: <divid="container" ><divclass="item"> ;Erstes untergeordnetes Element</div><divclass="item"&

Der JavaScript-Selektor schlägt fehl, weil der Code nicht standardisiert ist. Die Lösung ist: 1. Entfernen Sie den importierten JS-Code und die ID-Selektormethode wird wirksam. 2. Führen Sie einfach den angegebenen JS-Code ein, bevor Sie „jquery.js“ einführen.

Im vorherigen Artikel „Css-Pseudo-Selektor-Lernen – Pseudo-Element-Selektor-Analyse“ haben wir etwas über Pseudo-Element-Selektoren gelernt, und heute werfen wir einen genaueren Blick auf Pseudo-Klassen-Selektoren. Ich hoffe, dass es für alle hilfreich ist!

Nicht im Lieferumfang enthalten. Zu den CSS-Selektoren gehören: 1. Tag-Selektor, der bestimmte HTML-Elemente anhand des Elementnamens der HTML-Seite findet; 2. Klassen-Selektor, der bestimmte HTML-Elemente anhand des Werts des Klassenattributs des HTML-Elements findet; welche bestimmte HTML-Elemente über den Wert des id-Attributs des HTML-Elements lokalisieren. 4. Der Platzhalter-Selektor „*“ kann auf alle Arten von Tag-Elementen verweisen, einschließlich benutzerdefinierter Elemente. 5. Der Attribut-Selektor verwendet den vorhandenen Attributnamen des HTML-Element oder Attributwert zum Auffinden eines bestimmten HTML-Elements.

Eingehende Analyse von Ist- und Wo-Selektoren: Verbesserung des Niveaus der CSS-Programmierung Einführung: Im Prozess der CSS-Programmierung sind Selektoren ein wesentliches Element. Sie ermöglichen es uns, Elemente in einem HTML-Dokument basierend auf bestimmten Kriterien auszuwählen und zu formatieren. In diesem Artikel werden wir uns eingehend mit zwei häufig verwendeten Selektoren befassen, nämlich dem Is-Selektor und dem Where-Selektor. Durch das Verständnis ihrer Arbeitsprinzipien und Nutzungsszenarien können wir das Niveau der CSS-Programmierung erheblich verbessern. 1. Der Selektor ist eine sehr mächtige Wahl

lxml ist eine leistungsstarke Python-Bibliothek zur Verarbeitung von XML- und HTML-Dokumenten. Als Parsing-Tool bietet es eine Vielzahl von Selektoren, mit denen Benutzer die erforderlichen Daten einfach aus Dokumenten extrahieren können. In diesem Artikel werden die von lxml unterstützten Selektoren ausführlich vorgestellt. lxml unterstützt die folgenden Selektoren: Tag-Selektor (ElementTagSelector): Wählen Sie Elemente nach Tag-Namen aus. Wählen Sie beispielsweise Elemente mit einem bestimmten Tag-Namen aus, indem Sie <tagname> verwenden

Vom Anfänger bis zum Experten: Beherrschen Sie die Fähigkeiten im Umgang mit Is- und Where-Selektoren. Einführung: Im Prozess der Datenverarbeitung und -analyse ist der Selektor ein sehr wichtiges Werkzeug. Durch Selektoren können wir die erforderlichen Daten entsprechend bestimmten Bedingungen aus dem Datensatz extrahieren. In diesem Artikel werden die Verwendungsfähigkeiten von is- und where-Selektoren vorgestellt, um den Lesern zu helfen, die leistungsstarken Funktionen dieser beiden Selektoren schnell zu beherrschen. 1. Verwendung des is-Selektors Der is-Selektor ist ein grundlegender Selektor, der es uns ermöglicht, den Datensatz basierend auf gegebenen Bedingungen auszuwählen.
