【发布时间】:2018-05-17 09:38:54
【问题描述】:
作为一个挑战,我正在尝试创建一个 JavaScript 选择引擎,即一个 JavaScript 函数,它将返回给定 CSS 选择器的 DOM 元素。
我无法使用 document.querySelector/document.querySelectorAll。
我目前正在创建参数的对象,但现在卡住了。我现在需要遍历页面上的每个元素,如果它与我的标记或类/id 匹配,则将该元素推送到一个数组中。
$("div") //Should return 2 DIVs
$("img.some_class") //Should return 1 IMG
$("#some_id") //Should return 1 DIV
$(".some_class") //Should return 1 DIV and 1 IMG
function $ (selector) {
var elements =[];
var pageTags =[];
var all = document.getElementsByTagName("*");
//splits selector
var arg = parse(selector);
function parse(subselector) {
var obj = {tags:[], classes:[], ids:[], attrs:[]};
subselector.split(/(?=\.)|(?=#)|(?=\[)/).forEach(function(token){
switch (token[0]) {
case '#':
obj.ids.push(token.slice(1));
break;
case '.':
obj.classes.push(token.slice(1));
break;
case '[':
obj.attrs.push(token.slice(1,-1).split('='));
break;
default :
obj.tags.push(token);
break;
}
});
return obj;
}
console.log(arg);
for (var item of all) {
//gets tagname of all page elements
var element = item.tagName.toLowerCase();
console.log(element);
//if argument contains DOM element
if (arg.indexOf(element) !== -1) {
var x = document.getElementsByTagName(element);
for (var test of x) {
elements.push(test);
}
}
}
return elements;
}
<html>
<head>
<script src="Answer.js"></script>
<script src="Test.js"></script>
</head>
<body onload="test$()">
<div></div>
<div id="some_id" class="some_class some_other_class"></div>
<img id="some_other_id" class="some_class some_other_class"></img>
<input type="text">
</body>
</html>
如有任何帮助,我们将不胜感激。
【问题讨论】:
-
只有这一次我会说“使用 jquery”
-
挑战是使用原生 JavaScript :(
-
你不知道或者不想用
querySelectorAll()? -
这是挑战@Mamun,我不能使用它或jQuery。
-
这听起来像是家庭作业。不是功课吗?这绝对是家庭作业。
标签: javascript html arrays object dom