Rumah  >  Soal Jawab  >  teks badan

Setiap 3 elemen membalut elemen induk

Saya hanya mahu membungkus div dengan kelas tayangan slaid di sekeliling setiap 3 div dengan kelas untuk audio carian.

Satu ralat yang saya dapat ialah ia mengatakan elem.parentElement is undefined...

Jadi bahagian ini berfungsi dengan baik...

const audioBlocks = document.querySelectorAll('.search-audio');
const slider = document.querySelector('.slider');
const audioBlockArr = Array.from(audioBlocks);

function groupBlocks(arr, len) {

    let groups = [],
        i = 0,
        n = arr.length;
  
    while (i < n) {
      groups.push(arr.slice(i, i += len));
    }
  
    return groups;
  }

newArr = [...groupBlocks(audioBlockArr, 3)];

Inilah masalahnya - membungkus div di sekeliling tatasusunan baharu elemen terkumpul.

let wrap = (array) => {
  
  array.forEach((elem) => {
    let div = document.createElement('div');
    div.classList.add('slide');
    div.innerHTML = '';

    elem.parentElement.insertBefore(div, elem);
    div.appendChild(elem);
  });
}

wrap(newArr);

Kod penuh:

const audioBlocks = document.querySelectorAll('.search-audio');
const slider = document.querySelector('.slider');
const audioBlockArr = Array.from(audioBlocks);

function groupBlocks(arr, len) {

  let groups = [],
    i = 0,
    n = arr.length;

  while (i < n) {
    groups.push(arr.slice(i, i += len));
  }

  return groups;
}

newArr = [...groupBlocks(audioBlockArr, 3)];

let wrap = (array) => {
  array.forEach((elem) => {
    let div = document.createElement('div');
    div.classList.add('slide');
    div.innerHTML = '';

    elem.parentElement.insertBefore(div, elem);
    div.appendChild(elem);
  });
}

wrap(newArr);
body {
  font-family: system-ui;
  background: #f06d06;
  color: white;
  text-align: center;
}

.search-audio {
  height: 12rem;
  width: 12rem;
  background: rgb(255, 153, 0);
  margin: .5rem;
  display: inline-block;
}

.slide {
  background-color: #555;
}
<body>
  <div class="slider">
    <div class="search-audio 1"></div>
    <div class="search-audio 2"></div>
    <div class="search-audio 3"></div>
    <div class="search-audio 4"></div>
    <div class="search-audio 5"></div>
    <div class="search-audio 6"></div>
    <div class="search-audio 7"></div>
    <div class="search-audio 8"></div>
    <div class="search-audio 9"></div>
    <div class="search-audio 10"></div>
    <div class="search-audio 11"></div>
    <div class="search-audio 12"></div>
    <div class="search-audio 13"></div>
    <div class="search-audio 14"></div>
    <div class="search-audio 15"></div>
    <div class="search-audio 16"></div>
    <div class="search-audio 17"></div>
    <div class="search-audio 18"></div>
    <div class="search-audio 19"></div>
    <div class="search-audio 20"></div>
  </div>
</body>

</html>

P粉211273535P粉211273535180 hari yang lalu275

membalas semua(2)saya akan balas

  • P粉489081732

    P粉4890817322024-04-03 12:01:37

    Saya rasa anda terlalu merumitkan perkara dengan menggunakan CSS untuk setiap div ketiga menggunakan kelas :nth-child.search-audio 的样式应用到 .slide. < /p>

    Kod ini mungkin salah, tetapi serupa dengan:

    .slide:nth-child(3n) {
      /* move styles here from .search-audo */
    }
    

    Berikut ialah beberapa pautan yang mungkin membantu dalam mempelajari cara menggunakannya:

    balas
    0
  • P粉012875927

    P粉0128759272024-04-03 09:47:30

    Masalahnya elem 不是单个元素,它是由 groupBlocks() 创建的 3 个元素的数组。所以没有 elem.parentElement.

    Gunakan elem[0].parentElement untuk mendapatkan induk bersama semua elemen. Kemudian gelung melaluinya untuk menambahkan setiap elemen pada div baharu.

    Saya menukar elem 重命名为 group dalam kod di bawah untuk memadankan dengan lebih tepat kandungannya.

    const audioBlocks = document.querySelectorAll('.search-audio');
    const slider = document.querySelector('.slider');
    const audioBlockArr = Array.from(audioBlocks);
    
    function groupBlocks(arr, len) {
    
      let groups = [],
        i = 0,
        n = arr.length;
    
      while (i < n) {
        groups.push(arr.slice(i, i += len));
      }
    
      return groups;
    }
    
    newArr = [...groupBlocks(audioBlockArr, 3)];
    
    let wrap = (array) => {
      array.forEach((group) => {
        let div = document.createElement('div');
        div.classList.add('slide');
        div.innerHTML = '';
    
        group[0].parentElement.insertBefore(div, group[0]);
        group.forEach(elem => div.appendChild(elem));
      });
    }
    
    wrap(newArr);
    body {
      font-family: system-ui;
      background: #f06d06;
      color: white;
      text-align: center;
    }
    
    .search-audio {
      height: 12rem;
      width: 12rem;
      background: rgb(255, 153, 0);
      margin: .5rem;
      display: inline-block;
    }
    
    .slide {
      background-color: #555;
    }
    
      

    balas
    0
  • Batalbalas