要做前端,我们需要选择元素,虽然jQuery和js库帮助我构建了轮子,但是我想尽我所能去实现。及时,我不忙。我只添加了我自己的js文件。以下是实现代码。你可以称它为这种格式与$ G(#内容。OP),作为jQuery的参数相同的():


功能findchilds美元(parentNode,文本)
{
如果父节点传入,则默认为主体。
如果(parentNode =未定义)
document.body parentNode =;
VaR子= parentnode.childnodes;
var结果{ };
子节点大于零仅循环。
如果(childnodes.length > 0)
{
VaR的长度= childnodes.length;
查找具有文本循环的节点
对于(var i = 0;i <长度;+ i)
{
/ /三、类名、ID、标签名
Switch (text.substr (0, 1))
{
'案例':
两 / /:parentnode.getelementsbyclassname,parentnode.all
稍后添加,如果浏览器不支持所有这两种方法,它只能是暴力递归。
如果(parentNode。getelementsbyclassname)
返回parentnode.getelementsbyclassname(text.substr(1));
如果(parentNode。所有)
{
VaR分析= { };
无功jlength = parentnode.all.length;
对于(var j = 0;J < jlength;+ + J)
如果(parentNode,{ } = = text.substr J。类名(1))
Finded.push(parentNode,{,});
返回列表;
}
上述两种方法不支持直接判断。
If (childNodes{i}.className = = text.substr (1))
results.push(子{我});
打破;
案例#:
返回{ document.getelementbyid(text.substr(1))};
违约:
返回parentnode.getelementsbytagname(文本);
}
/ /判断后,子元素来findchilds美元递归搜索元素,返回的结果直接是合并的结果
结果= results.concat($ findchilds(子{我},文本));
}
}
返回结果;
}

string.prototype.vtrim =函数(){
返回this.replace( / ^ + | + $ /克,);
}

函数$(文本)
{
根据分割参数空间
VaR值= text.vtrim()。分裂();
VaR的长度= values.length;
如果只有一个选择参数,直接调用DOM方法返回结果。
如果(长度= 1)
开关(值{ 0 }。substr(0, 1))
{
案例# :
document.getelementbyid(返回值{ 0 }。substr(1));
案例
如果(文件。getelementsbyclassname)
document.getelementsbyclassname(返回值{ 0 }。substr(1));
违约:
document.getelementsbytagname(返回值{ 0 });
}
/ /每次迭代都会产生许多结果符合节点参数,节点的结果这里叫父,第一周期默认为体
无功父= {体}文件;
外循环是每一个传入参数迭代。
对于(var i = 0;i <长度;+ i)
{
无功jlength = parentnodes.length;
var结果{ };
如果值的长度在这里为零,
它是/额外的空间,
例如:这种情况不直接将代码直接执行到下一个循环。
Var tmpValue = values{i}.vtrim ();
如果(tmpvalue.length 0)
继续;
对于内部循环节点结果的每一次迭代,
在搜索节点中,满足选择条件的结果,当然,第一次是主体。
对于(var j = 0;J < jlength;+ + J)
{
/ / findchilds美元是功能上的一面,这是选择一个节点的子节点。
var result = findchilds美元(父{ } { } J,值。vtrim());
VaR RLENGTH = result.length;
因为回有时 / /的HTML,并不能直接进入指定位置的数组,数组,这里有优化的空间,但不考虑性能,这样做。
对于(var k = 0;K<RLENGTH;+ + K)
results.push(结果{ k });
}
没有结果,立即返回未定义
如果(效果= =定义的| | results.length < = 0)
返回未定义;
最后一个循环返回结果数组,但如果最后一个条件是id,它将返回一个直接返回的DOM对象数组。
如果(= =长度- 1)
{
如果(值{我},substr(0, 1)= =# )
返回结果{ 0 };
返回结果;
}
父=结果;
}
}




FF IE6测试后,ID的简单选择比jQuery快得多。

其他部分选择模式我比jQuery测试快了一些。

当然,测试不能全面,可能有bug,而且不支持伪类的选择。