一个cssQuery对象 javascript脚本实现代码

代码如下:

/**
* @author Supersha
* @QQ:770104121
*/
var cssQuery = {
//parent:用于存储当前节点的父节点的引用
parent: document,
select: function(selectorStr){
var selectors=selectorStr.split(" "); //分隔字符串
for (var i = 0, len = selectors.length; i < len; i++) {
var el = this.parent || document; //用于存储指定class属性的节点引用
var val=this.replaceStr(selectors[i]); //代替掉"#"和"."点号,用于获取指定的ID的节点引用
if (selectors.length == 1) { //如果只有一个参数
if (!(/[#.]/g).test(selectors[i])) { //如果是HTML标签
return document.getElementsByTagName(selectors[i]);
}
else { //如果是ID或者指定的class值
//判断是ID还是class属性
return (this.IDLabel(selectors[i])) ? this.$(val) : this.getElementsByClassName(document, "*", val);
}
}
//如果达到selectorStr字符号中最后的那个ID或者class或者HTML标签
else if(i == selectors.length-1){
if (!(/[#.]/g).test(selectors[i])) { //如果是HTML标签
return el.getElementsByTagName(selectors[i]);
}
else { //如果是ID或者class属性
return (this.IDLabel(selectors[i])) ? this.$(val) : this.getElementsByClassName(el,"*",val);
}
}
else{ //如果存在两级以上的selectorStr,则存储当前节点的引用到parent属性中
if (!(/[#.]/g).test(selectors[i])) { //如果是HTML标签
this.parent = el.getElementsByTagName(selectors[i])[0];
}
else { //如果是ID或者class属性
this.parent = ((/#/gi).test(selectors[i])) ? this.$(val) : el;
}
}
}
},
$: function(id){ //用于得到指定ID的引用
return document.getElementById(id);
},
IDLabel: function(selector){ //判断是否是ID属性
return ((/#/gi).test(selector)) ? true : false;
},
classLabel: function(selector){ //判断是否是class属性
return ((/\./gi).test(selector)) ? true : false;
},
replaceStr:function(a){ //替换掉"#"和"."点号,用于获取指定的ID的节点引用
return a.replace("#","").replace(".","");
},
getElementsByClassName: function(el, tag, classname){ //通过class属性值获取含有class属性值的元素的引用
var elem = el || document;
if (!classname)
return;
tag = tag || "*";
var allTagsDom = ((tag == "*") && (elem.all)) ? elem.all : elem.getElementsByTagName(tag);
classname = classname.replace(/\-/g, "\\-");
var regex = new RegExp("(^|\\s*)" + classname + "(\\s*|$)");
var matchElements = new Array();
var element;
for (var i = 0; i < allTagsDom.length; i++) {
element = allTagsDom[i];
if (regex.test(element.className)) { //根据正则来检测类名
matchElements.push(element);
}
}
return matchElements;
}
}
//调用方法:cssQuery.select(selectorString); selectorString 像这种:"#p #b .em",
//可以接收HTML标签和ID、class的组合,返回指定的selectorString的引用

(0)

相关推荐

  • 一个cssQuery对象 javascript脚本实现代码

    复制代码 代码如下: /** * @author Supersha * @QQ:770104121 */ var cssQuery = { //parent:用于存储当前节点的父节点的引用 parent: document, select: function(selectorStr){ var selectors=selectorStr.split(" "); //分隔字符串 for (var i = 0, len = selectors.length; i < len; i++

  • Java实例化一个抽象类对象的方法教程

    前言 最近在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然有构造方法,又不可以通过new来创建,那么抽象类在没变成具体类的时候究竟可不可以实例化呢? 在Java 中抽象类是不能直接被实例化的.但是很多时候抽象类的该特点成为一个比较麻烦的阻碍.例如如果我想使用动态代理来给一个抽象类赋予其执行抽象方法的能力,就会有两个困难:1. 动态代理只能创建实现接口的一个代理对象,而不能是一个继承抽

  • 探析浏览器执行JavaScript脚本加载与代码执行顺序

    本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析.渲染以及其他资源的下载都要停下来等待脚本执行完毕①.这一点是没有争议的,并且在所有浏览器中的行为都是一致的,原因也不难理解:浏览器需要一个稳定的DOM结构,而JavaScript可能会修改DOM(改变DOM结构或修改某个

  • JavaScript对象链式操作代码(jquery)

    虽然现在慢慢减少了对jQuery的使用(项目上还是用,效率高点.平时基本不用了),希望从而减少对jQuery的依赖度. 但是这链式操作的方式实在吸引人(貌似现在不少新库都采用了链式操作). 新手无畏嘛,所以写了以下代码.主要是避免以后又忘了,呵呵. 复制代码 代码如下: window.k = function() { return new k.fn.init(arguments); } k.fn = k.prototype = { init:function() { this.length =

  • JavaScript创建一个object对象并操作对象属性的用法

    本文实例讲述了JavaScript创建一个object对象并操作对象属性的用法.分享给大家供大家参考.具体分析如下: 下面的JS代码创建了一个myMovie对象,并给对象title和director属性赋值,通过Object定义对象,其属性可以不用定义,直接调用即可,非常简单. <script type="text/javascript"> var myMovie = new Object(); myMovie.title = "Aliens"; myM

  • PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    概要 应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作. 下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/),关键点如下 使用 QWebEngineView 加载网页,并显示进度. 在默认配置(QWebEngineProfile)中植入 Javascript 内容,这样脚本会在所有打开的网页中执行,不论跳转到哪个网址. Javascript 脚本使用网址中的路径名,判断当前网页位置,从而决定执行哪种操作.

  • 通过JavaScript脚本复制网页上的一个表格

    测试 测试表格 测试表格 测试表格 测试表格文字 "); // 初始化编辑器 editor.document.body.innerHTML = obj.outerHTML; editor.document.body.createTextRange().select(); // 选中编辑器内所有内容 editor.document.execCommand("copy","",null); // 复制 } function PastClipboardData(

  • Javascript脚本实现静态网页加密实例代码

    Javascript脚本实现静态网页加密,阅读Javascript脚本实现静态网页加密,前两天看见有人问静态网页加密问题,就写了这个代码思路:加密时:先把用户的密钥A用md5加密为B,然后用B异或源文件S0得到目标文件S1,把S1存入js变量中.解密时:询问密钥,然后操作同加密 前两天看见有人问静态网页加密问题,就写了这个代码 思路: 加密时:先把用户的密钥A用md5加密为B,然后用B异或源文件S0得到目标文件S1,把S1存入js变量中. 解密时:询问密钥,然后操作同加密. 因为用了md5,个人

  • javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象

    如果我们在客户端频繁使用ajax技术,那么我们就不得不多次创建xmlhttp对象.当然,如您所知,我们可以改进创建的方式,比如使用全局变量来缓存一个实例(客户端的单例模式?!),对于同步方式的通信,这是很有效的,但是这样的方式对于异步通信会出现问题,因为没有了进程的堵塞,用户可能在上一次通信未完成时再次调用同一个xmlhttp实例,这样不等前一个调用的回调函数触发,前一次调用就被"覆盖"掉了(也就代表前一次调用失败).建立一个保持xmlhttp实例的池,好处显而易见,最明显的优点就是我

  • 一个Javascript 编写的代码编辑器

    EditArea : http://sourceforge.net/projects/editarea 特点:1. 一个 Javascript 编写的代码编辑器, 支持代码加亮, 缩进, 行号等特征; 2. A free javascript editor for source code. It allow to write well formated source code with line numerotation, tab support, search & replace (with

随机推荐