Skip to content

Instantly share code, notes, and snippets.

@dandyraka
Created January 8, 2026 06:56
Show Gist options
  • Select an option

  • Save dandyraka/eaa112069d423b4895c989b3b1331674 to your computer and use it in GitHub Desktop.

Select an option

Save dandyraka/eaa112069d423b4895c989b3b1331674 to your computer and use it in GitHub Desktop.
(function() {
const teams = {
"TEAM LOVE": ["Alya Amanda", "Anindya Ramadhani", "Aurellia", "Aurhel Alana", "Cathleen Nixie", "Celline Thefani", "Cynthia Yaputera", "Fiony Alveria", "Fritzy Rosmerian", "Grace Octaviani", "Hillary Abigail", "Indah Cahya", "Jazzlyn Trisha", "Michelle Alexandra", "Nayla Suji"],
"TEAM DREAM": ["Adeline Wijaya", "Amanda Sukma", "Chelsea Davina", "Febriola Sinambela", "Freya Jayawardana", "Gabriela Abigail", "Gendis Mayrannisa", "Gita Sekar", "Greesella Adhalia", "Helisma Putri", "Jesslyn Elly", "Marsha Lenathe", "Nina Tutachia", "Oline Manuel", "Shabilqis Naila"],
"TEAM PASSION": ["Abigail Rachel", "Angelina Christy", "Catherina Vallencia", "Cornelia Vanisa", "Dena Natalia", "Desy Natalia", "Feni Fitriyanti", "Jessica Chandra", "Kathrina Irene", "Lulu Salsabila", "Michelle Levia", "Mutiara Azzahra", "Raisha Syifa", "Ribka Budiman", "Victoria Kimberly"]
};
// 1. Ambil semua elemen member yang ada di halaman (baik Anggota Inti maupun Trainee)
const allMemberNodes = Array.from(document.querySelectorAll('.col-4'));
const mainArea = document.querySelector('.entry-contents__main-area');
// 2. Kosongkan area utama agar kita bisa susun ulang
//mainArea.innerHTML = '<h2 class="section-title">JKT48 Team Sort</h2>';
while (mainArea.firstChild) {
mainArea.removeChild(mainArea.firstChild);
}
// Fungsi untuk mencari elemen berdasarkan nama (lebih fleksibel)
const findMemberElement = (name) => {
return allMemberNodes.find(node => {
const nodeText = node.innerText.toLowerCase().replace(/\s+/g, '');
const targetName = name.toLowerCase().replace(/\s+/g, '');
return nodeText.includes(targetName) || targetName.includes(nodeText);
});
};
// 3. Susun berdasarkan Team
Object.keys(teams).forEach(teamName => {
// Buat Label Team
const header = document.createElement('h2');
header.className = 'section-title';
header.style.padding = '10px';
header.innerText = teamName;
mainArea.appendChild(header);
// Buat Row Container
const row = document.createElement('div');
row.className = 'row row-all-10';
teams[teamName].forEach(memberName => {
const element = findMemberElement(memberName);
if (element) {
const clone = element.cloneNode(true);
row.appendChild(clone);
}
});
mainArea.appendChild(row);
});
// 4. Masukkan sisanya (Trainee/Member yang tidak masuk list) ke paling bawah
const footerHeader = document.createElement('h2');
footerHeader.className = 'section-title mt-5';
footerHeader.innerText = 'Trainee JKT48';
mainArea.appendChild(footerHeader);
const footerRow = document.createElement('div');
footerRow.className = 'row row-all-10';
// Cari member yang belum masuk ke team manapun
allMemberNodes.forEach(node => {
const isAlreadyAssigned = Object.values(teams).flat().some(name => {
const nodeText = node.innerText.toLowerCase().replace(/\s+/g, '');
const targetName = name.toLowerCase().replace(/\s+/g, '');
return nodeText.includes(targetName) || targetName.includes(nodeText);
});
if (!isAlreadyAssigned) {
footerRow.appendChild(node.cloneNode(true));
}
});
mainArea.appendChild(footerRow);
window.scrollTo(0,0);
console.log("Selesai! Member telah disusun ulang.");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment