通过在javascript函数中传递类名而不使用getElementsBy*或任何lib函数来查找页面中的所有元素

通过在javascript函数中传递类名而不使用getElementsBy*或任何lib函数来查找页面中的所有元素,javascript,Javascript,我试图通过在这个函数中传递类名来查找页面中的所有元素,我将所有元素作为arrays对象获取,但我只需要那些只有我的类名的元素 var custSearch = function (element, className) { var elementsArray = []; // add spaces var q = ' ' + className + ' '; (function recFind (node) { // Looping throu

我试图通过在这个函数中传递类名来查找页面中的所有元素,我将所有元素作为arrays对象获取,但我只需要那些只有我的类名的元素

    var custSearch = function (element, className) {
    var elementsArray  = [];
    // add spaces 
    var q = ' ' + className + ' ';
    (function recFind (node) {
    // Looping through all the child nodes
     for (var i = 0; i < node.childNodes.length; i++) {
      var currentNode  = node.childNodes[i];
      var currentClass = currentNode.className;

      // check if current class match with param class 
      if ((' '+currentClass+' ').indexOf(q)) {
        elementsArray.push(currentNode);
      }


      currentNode.childNodes && recFind(currentNode);
    }
   })(element);

  return elementsArray;
  }; 
custSearch(document, 'spch');
var custSearch=function(元素,类名){
var elementsArray=[];
//添加空格
var q=''+className+'';
(函数recFind(节点){
//循环通过所有子节点
对于(var i=0;i
我不想使用GetElementsByCassName函数,但我想要类似的结果,上面的函数应该给我精确的结果,但我没有发现我做错了什么,有人能告诉我是否有任何逻辑错误吗

HTML是这样的

<div class="spch s2fp-h" style="display:none" id="spch"><div class="spchc" id="spchc"><div class="_o3"><div class="_AM"><span class="_CMb" id="spchl"></span><span class="button" id="spchb"><div class="_wPb"><span class="_AUb"></span><div class="_Fjd"><span class="_oXb"></span><span class="_dWb"></span></div></div></span></div><div class="_gjb"><span class="spcht" id="spchi" style="color:#777"></span><span class="spcht" id="spchf" style="color:#000"></span></div><div class="google-logo"></div></div><div class="_ypc"><div class="_zpc"></div></div></div><div class="close-button" id="spchx">×</div></div>
×
尝试以下操作:

function myGetElementsByClassName(className) {

    var nodes = document.getElementsByTagName('*');
  var out = [];

  for( var i=0, len=nodes.length; i<len; i++) {
    if( nodes[i].classList.contains( className ) ) {
        out.push( nodes[i] );
    }
  }

  return out;

}
函数MyGetElementsByCassName(类名称){
var nodes=document.getElementsByTagName('*');
var out=[];

对于(var i=0,len=nodes.length;ii,如果你有一些能让你的工作更轻松的东西,为什么不使用它呢?有什么具体的原因吗?@Bharadwaj我正在准备一些考试,我正在尝试在没有预定义函数的情况下使用它。哦,请注意,如果没有找到sting,indexOf将返回-1,因此
('+currentClass+'')。indexOf(q)
的计算结果为true。数组中唯一不包含字符串以第一个字符开头的字符(即类列表中以类作为第一个字符的字符)。“有人能告诉我我是否有任何逻辑错误吗?”-是的。拒绝使用getElementsByClassName()是不合逻辑的对于这个。@Shad No您需要检查
(''+currentClass+'').indexOf(q)>=0
那么这段代码看起来很好。@RobG这是一个立即调用的递归函数。运行良好,您能解释一下为什么在这种情况下不能使用QuerySelector吗?是的,也可以使用QuerySelector,但我认为OP不是在寻找简单的解决方案。OP只是使用DOM来处理树遍历。这不是一个生产代码,只是黑客绕过谢谢你的回答,但我不能使用任何getElementsBy__;函数。@Umer Hayyat我已经在上面的评论中提到了不使用预定义函数编写它的原因。