`
zeroneta
  • 浏览: 7683 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

无聊吧自己以前的选择器代码优化了一下

阅读更多
/*
PQ普通的选择器(不支持伪类,由ZERONETA编写为PQ库在WA骨架上使用)
从PQ库上独立出来的,有些函数是补上去的,供大家参考或者嵌入到自己的JS开发库
*/
;var PQ = function()
{
	var
		pq = 1, //是否只使用PQ作为首选选择器,设置 0 时当浏览器支持原生选择器使用原生选择器,在原生选择器语法提示出错时再次尝试使用PQ选择器
		$q = /(\.|#)(\w+)/g,
		$w = /^\s*(\w+)/,
		$e = /^\[(\w+)\s*(?:(CLASS|ID|\!\=|\$\=|\*\=|\=|\^\=|\~\=|\|\=)\s*(\'|\")?([\w\u00c0-\uFFFF\-]+)\3)?\]/,
		$r = /^\s*( |\+|\>|~)\s*(?=\w|\[)/,
		_q = 0,
		_w = /(,)?([^,]+)/g,
		_e = Array.prototype.slice,
		_r = document.createElement( 'div' ),
		root = document,
		pack = Function,
		string = String,
		syntax = RegExp,
		trying = function( q ){ try { return q.apply( this, _e.call( arguments, 1 ) ); } catch ( w ) {}; },
		in_array = Array.prototype.indexOf || function( q ){ for ( var q in this ){ if ( this[ q ] == q ){ return q; }; }; return -1; },
		contains = _r.compareDocumentPosition
		? function( q, w )
		{
			return q !== w && q.compareDocumentPosition( w ) === 20;
		}
		: function( q, w )
		{
			if ( q !== w )
			{
				if ( q.contains )
				{
					return q.contains( w );
				};
				while ( w = w.parentNode )
				{
					if ( q === w )
					{
						return true;
					};
				};
			};
			return false;
		};

	function $t( q, w, e )
	{
		return '[' + ( w === '.' ? '_ CLASS ' : '_ ID ' ) + e + ']';
	};

	function $y( q, w )
	{
		var e = [], r;
		q = string( q ).replace( $q, $t ), w = w || document;
		if ( q.indexOf( ',' ) === -1 )
		{
			$i( q, w, e );
			return e;
		};
		for ( q = q.split( ',' ), r = 0; r < q.length; $i( q[ r++ ], w, e ) );
		for ( q = [], w = 0; w < r; ++r )
		{
			if ( in_array.call( q, e[ w ] ) )
			{
				q[ q.length ] = e[ w ];
			};
		};
		return q;
	};

	function $u( q, w, e )
	{
		if ( q.hasAttribute )
		{
			return q.hasAttribute( w );
		};
		i = q.getAttributeNode && q.getAttributeNode( w );
		return i ? i.specified : q.getAttribute( w ) !== null;
	};

	function $i( q, w, e, r )
	{
		var t = '*', y = 1, u, i;
		if ( $w.test( q ) )
		{
			q = syntax.rightContext,
			t = syntax.$1.toUpperCase(),
			y = 'q.tagName==="' + t + '"';
		};
		while ( $e.test( q ) )
		{
			q = syntax.rightContext;
			switch ( syntax.$2 )
			{
				case 'CLASS':
					y += '&&(" "+q.className.toUpperCase()+" ").indexOf(" ' + syntax.$4.toUpperCase() + ' ")!==-1';
					continue;
				case 'ID':
					y += '&&q.id.toUpperCase()==="' + syntax.$4.toUpperCase() + '"';
					continue;
				case '!=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&w!=="' + syntax.$4 + '"';
					continue;
				case '$=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&w.slice(-' + syntax.$4.length + ')==="' + syntax.$4 + '"';
					continue;
				case '*=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&w.indexOf("' + syntax.$4 + '")!==-1';
					continue;
				case '=':
					y += '&&q.getAttribute("' + syntax.$1 + '")==="' + syntax.$4 + '"';
					continue;
				case '^=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&w.substring(0,' + syntax.$4.length + ')==="' + syntax.$4 + '"';
					continue;
				case '~=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&(" "+w+" ").indexOf(" ' + syntax.$4 + ' ")!==-1';
					continue;
				case '|=':
					y += '&&(w=q.getAttribute("' + syntax.$1 + '"))&&(w+"-").substring(0,' + ( syntax.$4.length + 1 ) + ')==="' + syntax.$4 + '-"';
					continue;
				default:
					y += '&&this(q,"' + syntax.$1 + '")';
			};
		};
		if ( y === 1 )
		{
			return;
		};
		y = pack( 'q', 'var w;return ' + y );
		if ( u = $r.test( q ) )
		{
			q = syntax.rightContext, i = syntax.$1;
		};
		switch ( r )
		{
			case '+':
				for ( t = w.nextSibling; t; t = t.nextSibling )
				{
					if ( t.nodeType === 1 )
					{
						if ( y.call( $u, t ) )
						{
							u ? $i( q, t, e, i ) : e[ e.length ] = t;
						};
						return;
					};
				};
				return;
			case '>':
				for ( t = w.childNodes, r = 0; r < t.length; ++r )
				{
					if ( t[ r ].nodeType === 1 && y.call( $u, t[ r ] ) )
					{
						u ? $i( q, t[ r ], e, i ) : e[ e.length ] = t[ r ];
					};
				};
				return;
			case '~':
				for ( t = w.nextSibling; t; t = t.nextSibling )
				{
					if ( t.nodeType === 1 && y.call( $u, t ) )
					{
						u ? $i( q, t, e, i ) : e[ e.length ] = t;
					};
				};
				return;
			default:
				if ( u )
				{
					switch ( i )
					{
						case ' ':
							for ( t = w.getElementsByTagName( t ), r = 0, w = t[0]; r < t.length; ++r )
							{
								if ( y.call( $u, t[ r ] ) )
								{
									contains( w, t[ r ] ) || $i( q, w = t[ r ], e, i );
								};
							};
							return;
						case '~':
							for ( t = w.getElementsByTagName( t ), r = 0, w = []; r < t.length; ++r )
							{
								if ( y.call( $u, t[ r ] ) && in_array.call( w, t[ r ].parentNode ) === -1 )
								{
									w[ w.length ] = t[ r ].parentNode,
									$i( q, t[ r ], e, i );
								};
							};
							return;
						default:
							for ( t = w.getElementsByTagName( t ), r = 0; r < t.length; ++r )
							{
								y.call( $u, t[ r ] ) && $i( q, t[ r ], e, i );
							};
					};
					return;
				};
				for ( t = w.getElementsByTagName( t ), r = 0; r < t.length; ++r )
				{
					if ( y.call( $u, t[ r ] ) )
					{
						e[ e.length ] = t[ r ];
					};
				};
		};
	};

	function _t( q, w )
	{
		if ( w.nodeType === 9 )
		{
			return w.querySelectorAll( q );
		};
		_r = w.id,
		w.id = 'pq_query_node_id' + ++_q,
		q = w.querySelectorAll( q.replace( _w, '$1#' + w.id + ' $2' ) ),
		_r ? w.id = _r : w.removeAttribute( 'id' );
		return q;
	};

	if ( !pq && _r.querySelectorAll )
	{
		_r.innerHTML = '<a/>',
		_r = _r.querySelectorAll( 'div a' );
		if ( _r.length === 0 )
		{
			_t = function( q, w )
			{
				return w.querySelectorAll( q );
			};
		};
		if ( typeof _r === 'array' )
		{
			return function( q, w )
			{
				return trying( _t, q, w || root ) || $y( q, w );
			};
		};
		if ( !trying(function(){ return _e.call( _r ); }) )
		{
			_e = function()
			{
				for ( var q = [], w = 0; w < this.length; ++w )
				{
					q[ w ] = this[ w ];
				};
				return q;
			};
		};
		return function( q, w )
		{
			var e = trying( _t, q, w || root );
			return e ? _e.call( e ) : $y( q, w );
		};
	};
	return $y;
}();


有开发WEB类程序员技术交流的吗 加群 456357348 交流 最好是有一定基础的 或有想法的
有关范围 Windows MySQL Apache PHP Node HTML JavaScript CSS 浏览器 缓存技术
分享到:
评论

相关推荐

    jQuery 星级评分效果实例 基于jQuery 的星级评分效果实例,淘宝网和口啤网等大网站都可见到本效果,本代码同样借鉴了口啤网,感谢原作者,因本人水平有限,本星级评分代码性能仍有一定提升空间,只是闲来无聊练手之作。

    这里提到的代码可能有提升空间,可以通过减少DOM操作次数、利用事件委托或优化CSS选择器等方式来提升代码执行效率。同时,考虑到兼容性和可维护性,我们应该遵循良好的编码规范,如使用模块化开发,将代码组织成可...

    SHT20源代码及中英文手册.rar

    开发者可以参考这些示例,结合自己的微控制器平台进行移植和扩展。 五、中英文手册 手册是理解SHT20的重要资源,中文手册可以帮助国内开发者更方便地理解传感器的操作和应用,而英文手册则提供了更详细的规格和技术...

    前端项目-css-spinning-spinners.zip

    5. **伪类选择器**:利用`:hover`、`:active`和`:focus`等伪类选择器来改变元素在特定状态下的样式,比如鼠标悬停时的加载指示器效果。 6. **CSS Flexbox** 或 **Grid布局**:这些现代布局技术可以帮助我们轻松地...

    花园里的小孩(用VBA做的一个无聊打发时间的小游戏)

    将军每回合可以选择上、下、左、右四个方向之一移动一步,而土匪们则可以从他们的当前位置中选择三个没有障碍的方向之一进行移动。游戏的目标对于将军而言,就是要在援军到达之前尽可能地存活。这个设定引入了策略和...

    最简单的双色球机选器v1.3+源码

    双色球机选器是一款基于C++编程语言开发的简单应用程序,主要功能是自动生成双色球彩票的随机号码,供用户参考选择。这个程序对于初学者来说是一个很好的学习资源,因为它提供了完整的源代码,可以帮助他们理解C++...

    BiliDownload:无聊,造车轮,自用

    尽管已经有现成的B站下载器,但开发者选择自己动手,这既是一种技术实践,也是对个人能力的提升。 这个项目基于Python语言,Python以其简洁的语法和丰富的库资源,成为编写这类工具的理想选择。通过调用B站的API,...

    java建站系统源代码

    用户可以根据自己的需求选择不同的功能模块,快速构建个性化网站。 描述中提到的安全性是Java建站系统的一个重要优势。Java语言自身具有良好的安全特性,如内存管理和垃圾回收机制,能有效防止某些类型的攻击。此外...

    突出显示颜色「Highlight Color」-crx插件

    如何使用下载扩展名单击“启用”框使用计算机默认的颜色选择器轻松选择所需的颜色,然后单击“保存更改”,颜色将会更改 3.0 Bug修复PS的代码确实很混乱且优化不佳,因为这是我编写的第一批扩展之一,当我有机会进行...

    Highlight Color-crx插件

    如何使用下载扩展名单击“启用”框使用计算机默认的颜色选择器轻松选择所需的颜色,然后单击“保存更改”,颜色将会更改。 3.0 Bug修复PS的代码确实很混乱且优化不佳,因为这是我编写的第一批扩展之一,当我有机会...

    android 点选列表

    在Android开发中,点选列表(通常称为单选列表或Spinner)是一种常见的用户界面元素,它允许用户从一组预定义的选项中选择一个。Spinner在许多应用中都有应用,例如设置菜单、下拉选择等。下面我们将深入探讨Android...

    webpack基础资料.pdf

    在社区中,有各种各样的Webpack插件可供选择,帮助开发者实现各种功能,例如自动清除输出目录、优化文件、集成测试框架等。此外,开发者还可以自己编写loader和plugin以满足特定的项目需求。 Webpack为现代前端开发...

    bored:无用的记忆

    例如,通用选择器(*),类型选择器(如p),ID选择器(#id名),类选择器(.class名),属性选择器([attr=value])等。选择器的组合使用可以实现更精确的样式控制。 2. **层叠和继承**:CSS中的“级联”体现在多...

    MIT Python pset6.doc

    计算机玩家的设计涉及到算法选择和优化,可能需要实现以下功能: 1. **字典搜索**:计算机玩家需要快速地在一个单词列表或字典中搜索可能的单词。 2. **评分系统**:根据新规则,计算机玩家需要计算每个单词的得分...

    爬取煎蛋网图片的简易爬虫程序(2021.6.28可用)

    它可以帮助我们解析HTML结构,通过CSS选择器或XPath找到目标元素,进而获取图片链接。例如,我们可以使用find_all('img')来找到所有的img标签,然后逐个处理它们的src属性。 此外,os库用于处理文件系统操作,如...

    小游戏开发

    描述中提到的"闲的无聊的朋友可以回味一下童年哦"可能意味着这个游戏设计借鉴了一些经典的童年游戏元素,比如马里奥、坦克大战或者俄罗斯方块等,这些经典游戏的重制或创新往往能勾起玩家的美好回忆。 在压缩包中,...

    EEG-Emotion-classification-master_merelyts3_said63o_songc4x_DEAP

    开发者可以参考该项目的代码来理解如何运用DEAP数据集进行EEG情绪识别,也可以进行二次开发,优化现有的方法或尝试新的模型。 总结起来,本项目围绕DEAP数据集进行EEG情绪识别,涉及了信号处理、特征工程和机器学习...

    suyashKarmaMetal.github.io

    1. **选择器与属性**:利用类选择器、ID选择器、伪类等来精准地选中页面元素,并应用相应的样式属性,如颜色、背景、边距等。 2. **盒模型**:理解CSS盒模型(包括内容、内边距、边框和外边距)对于精确控制元素的...

    jQuery实现的超简单点赞效果实例分析

    首先,通过jQuery选择器获取到`&lt;i&gt;`、`&lt;em&gt;`和`&lt;s&gt;`元素。接着,遍历所有`&lt;em&gt;`元素,将它们的文本内容(即点赞数)存储到数组`Arr`中,找到最大值,然后计算出每个点赞数所对应的百分比高度。将这个高度应用到`&lt;i&gt;`...

    jquery.PrintArea.js

    该插件通过添加CSS类或者ID来标记需要打印的元素,例如,我们可以为某个div元素添加`class="printable"`,然后通过jQuery选择器选取这个元素,调用PrintArea.js的功能进行打印。这样,只有被标记的部分才会出现在...

    mybatis.zip

    Mybatis 是一个流行的Java持久层框架,用于简化数据库操作,将SQL与Java代码紧密集成,提供了灵活的映射机制和动态SQL支持。本压缩包包含了关于Mybatis的源码,可以深入理解其内部工作原理。 1. **Mybatis 概述** ...

Global site tag (gtag.js) - Google Analytics