javascript - 如何为不同的类包装某个类的所有元素?

标签 javascript jquery

考虑以下因素:

<nav class="folder_sesssion_file dynamc_class"></nav>
<nav class="folder_sesssion_file dynamc_class"></nav>

然后是这个:

<nav class="folder_sesssion_file another_dynamic_class"></nav>
<nav class="folder_sesssion_file another_dynamic_class"></nav>

我想通过根据 dynamic_class 等常见类对它们进行分组来包装所有这些 elms。这样以下的事情就成为可能。

<section class="new_parent_class">
  <nav class="defualt_class dynamc_class" data-class="dynamc_class"></nav>
  <nav class="defualt_class dynamc_class" data-class="dynamc_class"></nav>
  <section>
    <section class="new_parent_class">
      <nav class="defualt_class some_class" data-class="some_class"></nav>
      <nav class="defualt_class some_class" data-class="some_class"></nav>
      <section>

我无法弄清楚逻辑。

我尝试了以下方法,但是,我认为我不应该使用“each”。

$(".defualt_class").each(function(index, element) {
  var channel_class = $(this).attr('data-class');
  $("." + channel_class + "").wrapAll('<section class="new_parent_class">');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="new_parent_class">
  <nav class="defualt_class dynamc_class" data-class="dynamc_class"></nav>
  <nav class="defualt_class dynamc_class" data-class="dynamc_class"></nav>
  <section>
    <section class="new_parent_class">
      <nav class="defualt_class some_class" data-class="some_class"></nav>
      <nav class="defualt_class some_class" data-class="some_class"></nav>
      <section>

最佳答案

在迭代元素时,使用数组来保存类名称,然后您可以迭代该类名称以基于每个类包装元素。

您的代码将如下所示:

var cats = []; // An array to hold the class names
var $elems = $('.common-class'); // All elements of common-class

// iterate all elements of common-class
$elems.each(function(idx, elem) { 
    // get the last class name
    var dynClass = elem.className.split(' ').pop(); 

    // apply the data attribute with this name
    elem.dataset.class = dynClass; 

    // store the class name in the array if not already done
    if (cats.indexOf(dynClass) == -1) { cats.push(dynClass); }
});

// iterate the array
cats.forEach(function(cls) {
    // for each class name, wrap elements in new-parent
    $('.' + cls).wrapAll('<section class="new-parent">');
});

演示 fiddle :http://jsfiddle.net/abhitalks/zj6cm0j0/2/

演示片段:

var $elems = $('.common-class');
function group() {
    var cats = [];
    $elems.each(function(idx, elem) {
        var dynClass = elem.className.split(' ').pop();
        elem.dataset.class = dynClass;
        if (cats.indexOf(dynClass) == -1) { cats.push(dynClass); }
    });
    cats.forEach(function(cls) {
        $('.' + cls).wrapAll('<section class="new-parent">');
    });
}
$('#btn').on('click', group);
section { 
    background-color: #ddd; border: 1px solid #999; 
    margin: 8px; padding: 8px; 
}
nav.dynamic-class { background-color: #99d; margin: 8px; padding: 4px; }
nav.some-class { background-color: #9d9; margin: 8px; padding: 4px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn">Start Grouping</button>
<nav class="common-class dynamic-class">Dynamic-1</nav>
<nav class="common-class some-class">Some-A</nav>
<nav class="common-class dynamic-class">Dynamic-2</nav>
<nav class="common-class some-class">Some-B</nav>

关于javascript - 如何为不同的类包装某个类的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33429112/

相关文章:

jquery - Rails 5 jQuery .ajax 方法数据格式

javascript - 如何使用 Angular 2 在 *ngFor 列表中显示被点击的元素隐藏其他元素

javascript - 何时渲染模型以及何时渲染集合 - Backbone.js

javascript - 使用 mocha 模拟 Nodejs 中的函数

javascript - 动态包含 javascript 文件中的 javascript 代码

javascript - 如何从html标签中只获取文本

javascript - 如何删除滚动sidenav

jquery - jqgrid如何将json格式的所有rowData发送到服务器?

javascript - Phonegap 中的 HTTP 请求

javascript - 运行终端应用程序时出现意外的 token 导出