我需要创建一个JavaScript函数,它将返回DOM元素给定一个没有jquery的CSS选择器

时间:2014-03-12 00:01:23

标签: javascript html css

HTML                                                            

JavaScript我有这么远

 var $= function(selector){
 var elements = [];
if (selector == "#some_id"){
  elements.push( document.getElementById("some_id"));
}else if (selector == '.some_class'){
  elements= document.getElementsByClassName("some_class");
} else if (selector == "div"){
  elements = document.getElementsByTagName("div");
}else if (selector == "img"){
  elements.push(document.getElementsByTagName("img"));
}
console.log(elements);
return elements;
};

在获取嵌套选择器时遇到问题:(“img.some_class”)和(“div.some_class#some_id”)

2 个答案:

答案 0 :(得分:2)

您是否尝试过querySelectorquerySelectorAll

以下是两个简单的例子:

var el = document.querySelector(".myclass");
var matches = document.querySelectorAll("div.note, div.alert");

有关更多信息,请参阅此处: https://developer.mozilla.org/en-US/docs/Web/API/document.querySelectorAll

jQuery选择器的一个非常简单的模拟:

$ = function (selector) {
  return document.querySelectorAll(selector);
}

答案 1 :(得分:0)

我想你被要求不要像我一样使用JQuery和 querySelector()/ querySelectorAll()

你可以找到这样的嵌套选择器:

...} else if (selector == "div#some_id.some_class") {
  elements.push(document.getElementById("some_id"));
} else if (selector == "div.some_class#some_id") {
  elements.push(document.getElementById("some_id"));
} 
...

你的答案很棒,因为我花了两天时间试图获得它而你的答案非常简单,我可以很快完成最后两次测试。

我仍然不知道为什么这首先起作用,并且它不干,但我想它对将来的人有用。