Javascript 使用querySelectorAll/classList添加泛型类,而无需不断循环

Javascript 使用querySelectorAll/classList添加泛型类,而无需不断循环,javascript,jquery,arrays,selectors-api,Javascript,Jquery,Arrays,Selectors Api,我面临以下问题 每次我必须使用时,我需要 将从元素.querySelectorAll返回的节点列表转换为数组 对数组执行forEach以分别操作每个项 jQuery对上述内容进行了抽象,因此我想开发一种帮助器方法,类似于jQuery的工作原理,其工作原理如下: myhelper('.someClass').classList.add('newClass'); // there are more than 1 .someClass items myhelper('#id').classList.r

我面临以下问题

每次我必须使用时,我需要

  • 将从
    元素.querySelectorAll
    返回的节点列表转换为数组
  • 对数组执行forEach以分别操作每个项
  • jQuery对上述内容进行了抽象,因此我想开发一种帮助器方法,类似于jQuery的工作原理,其工作原理如下:

    myhelper('.someClass').classList.add('newClass'); // there are more than 1 .someClass items
    myhelper('#id').classList.remove('existingClass');
    
    本质上,
    myhelper(selector)
    应该在引擎罩下抽象上面的1+2点:从querySelectorAll获取节点列表,将其转换为一个数组,forEach数组并*执行用户给定的方法


    PS:为了简化,它可以用于一组特定的本机方法:例如classList方法和textContent

    我的第一个冲动是建议只使用jQuery,并在需要时进行扩展;)

    但是试一试:如果将
    my_Helper
    函数用作对象,它可以缓冲元素并包含在自身上使用这些元素的函数。如果直接调用my_Helper,则可以强制它返回一个新对象。 此外,添加的功能可以返回对象本身,因此可以像在jquery中一样使用链接。addClass的一个简单示例:

    函数我的助手(查询){
    if(this.constructor!==我的\u助手)
    return new my_Helper(query);//如果直接调用(不是new()),则返回一个新对象
    this.elements=document.querySelectorAll(查询);
    this.addClass=函数(类名){
    for(此.elements的变量el)
    el.classList.add(className);
    返回此;//以便能够使用链接
    }
    归还这个;
    }
    我的助手('.someClass').addClass('newClass').addClass('newClass2')//2个单独的类来测试链接
    .newClass{
    宽度:100px;
    高度:100px;
    }
    .newClass2{
    边框:1px纯黑;
    }
    
    
    您想使用普通JavaScript实现jQuery的
    addClass
    removeClass
    方法,对吗?是的,但是我想在querySelectorAll每次返回的节点列表上抽象循环。@kaido这是我想在内部使用的东西,所以如果该方法不存在,它应该什么都不做或者返回false。。我可以用call或[…nodelist]轻松地完成数组的工作,但我想完全隐藏循环。除了在新对象中递归地重写元素的所有属性,我看不到其他方法。但是您仍然需要定义getter是如何工作的。e、 g在您的
    myhelper('.someClass').classList.add()中,如果您停在
    .classList
    ,会发生什么?好问题。我想我会选择一个更简单的解决方案!我非常感谢您的努力,如果没有其他问题,我会将其标记为正确的,尽管我看到的是我们需要为每个方法执行for(或forEach)。。我只是想知道是否有可能使这个方法成为一个内部传递的参数,事实上所有的东西都只有一个方法,否则我想这很简单,我明白你的意思了。实施仍然需要对每一项重复相同的步骤。添加了一个示例以包含更通用的方法。它只公开您自己添加的方法,但是添加这样的方法就像添加this.text=fn('textContent')
    this.addClass=fn('classList','add')