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
返回的节点列表转换为数组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')代码>