javascript - 如何获取所有包含连字符/破折号(?)的类应用于任何 DOM 元素并将它们保存到 JavaScript 数组中?

标签 javascript arrays classname selectors-api

如何将所有包含连字符/破折号(?)的类应用于任何 DOM 元素并将它们保存到 JavaScript 数组中?

我的失败方法:

  var getClasses     = [];
  var classesContain = [];

  document.querySelectorAll('*').forEach( x => { 
  
    var y = x.className.split(' '); 
    getClasses.push(y); 
   
   });
   
  getClasses.forEach( c => { 
  
    if(c.contains('-')){ 
    
      classesContain.push(c); 
      
    } 
    
  });

最佳答案

您的尝试已经非常接近工作了。问题是您将数组推送到getClasses而不是单个类中,并且字符串和数组都没有标准的contains方法(有includes,这可能就是你的意思)。另外,如果您只想要包含 - 的内容,您可以提前将其过滤掉:

let classesWithDash = new Set();
document.querySelectorAll('*').forEach(element => { 
  for (const cls of element.className.split(' ').filter(name => name.includes("-"))) {
      classesWithDash.add(cls);
  }
});
// Now, `classesWithDash` is a set containing the class names with dashes
// If you want an array:
classesWithDash = [...classesWithDash];

实例:

let classesWithDash = new Set();
document.querySelectorAll('*').forEach(element => { 
  for (const cls of element.className.split(' ').filter(name => name.includes("-"))) {
      classesWithDash.add(cls);
  }
});
// Now, `classesWithDash` is a set containing the class names with dashes
// If you want an array:
classesWithDash = [...classesWithDash];
console.log(classesWithDash);
<div class="foo foo-bar"></div>
<div class="another-one"></div>
<div class="nodash"></div>

<小时/>

(我一直不明白为什么 Set 没有 addAll 方法,或者至少接受多个值来 add就像push一样...)

关于javascript - 如何获取所有包含连字符/破折号(?)的类应用于任何 DOM 元素并将它们保存到 JavaScript 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699508/

相关文章:

javascript - Rails 将 JavaScript 对象存储到模型的有效方法?

python从对象中获取类名

Netbeans 打开文件的快捷方式

javascript - 我可以用 setTimeout 重置一个未绑定(bind)的函数吗?

php - 如何解码json ajax响应

javascript - 从表中的输入获取数据

c++ - 如何处理非常大的矩阵(例如 1000000 x 1000000)

javascript - 组合两个数组以形成嵌套的javascript对象

jquery - 如何将两个数组合并为一个对象

javascript - Div/CSS 位置在 javascript 操作后不更新