【发布时间】:2015-03-21 18:16:10
【问题描述】:
我在大约 9(ish) 个月前放弃了 jquery,需要一个选择器引擎(没有所有麻烦,也不介意 ie
// "qsa" stands for: "querySelectorAll"
window.qsa = function (el) {
var result = document.querySelectorAll(el)[0];
return result;
};
这在 95% 的情况下都可以正常工作,但我已经有一段时间遇到这个问题了,我研究过 mdn、w3c、SO,不要忘记 Google :) 但还没有找到原因的答案我只得到请求类的第一个元素。 而且我知道只有返回的第一个元素是由末尾的“[0]”引起的,但是如果我删除它,该函数将不起作用,所以我尝试使用增加的索引变量创建一个 for 循环值取决于具有该类的元素的长度,如下所示:
window.qsa = function (el) {
var result, el = document.querySelectorAll(el);
for(var i = 0; i < el.length; ++i) {
result = el[i];
}
return result;
};
还是不行,所以我尝试了这样的 while 循环:
window.qsa = function (el) {
var result, i = 0, el = document.querySelectorAll(el);
while(i < el.length) {
i++;
}
result = el[i];
return result;
};
现在我开始怀疑是否有什么有效的方法?我对 document.querySelectorAll 感到非常沮丧...... 但是我顽固的内心一直在前进,我一直在失败(分层循环),所以我知道现在真的是时候问这些问题了:
为什么只返回该类的第一个元素而不是全部?
为什么我的 for 循环会失败?
为什么我的 while 循环会失败?
感谢您,因为我们非常感谢您提供任何/所有帮助。
【问题讨论】:
-
它是如何使用的?
-
为什么不只使用
return document.querySelectorAll(el)? -
问题肯定出在你使用它的地方。删除 [0] 将返回元素的 NodeList 而不是单个元素,因此您只需在访问元素时将其视为数组即可。