是否可以像jQuery一样通过id选择元素?

时间:2013-05-06 18:26:51

标签: javascript jquery

目前我选择像jQuery('a#encode-url-button, a#decode-url-button')这样的元素,是否可以在不创建新函数的情况下选择纯js中的相同元素?像document.getElementById('encode-url-button, decode-url-button').onclick = function...

这样的东西

1 个答案:

答案 0 :(得分:7)

是的,document.querySelectorAll。它接受一个CSS选择器。大多数现代浏览器support it

如果你真的需要支持IE7及更早版本,那么你当然可以做两个getElementById调用,如果它们不是锚点就扔掉它们。 (这是选择器a#someid的作用。)

如果您要对元素进行操作,则需要在querySelectorAll中循环生成结果列表,因为DOM API没有jQuery具有的“set theory”方向。例如:

var list = document.querySelectorAll("#encode-url-button, #decode-url-button");
var index;
for (index = 0; index < list.length; ++index) {
   list[index].onclick = clickhandler;
}
function clickHandler() {
    // ....
}

(我不主张使用这样的DOM0处理程序,而是使用addEventListener代替,但正如你在问题中引用onclick一样......)


FWIW,99.99%的时间将id选择器与标签选择器(a#someid)组合在一起是没有意义的,因为id值是唯一的。只需#someid通常会更好。添加标签不会使任何事情变得更快;事实上,它让事情变得更慢。这样做的唯一原因是,有时元素会有一个标记(比如a),有时候会有另一个标记(比如说,我不知道,div),如果它有,你只想得到它一个但不是另一个。很边缘的情况...