document.addEventListener('DOMContentLoaded', function() { fetch('https://99i-tts.hf.space/voices?l=zh&d') .then(response => response.json()) .then(data => { const voices = data.voices; displayVoices(voices); setupFilters(voices); }); function displayVoices(voices) { const tableBody = document.getElementById('voicesTable').getElementsByTagName('tbody')[0]; tableBody.innerHTML = ''; // 清空表格 voices.forEach(voice => { const row = tableBody.insertRow(); row.insertCell(0).innerText = voice.DisplayName; row.insertCell(1).innerText = voice.Gender; row.insertCell(2).innerText = voice.LocalName; row.insertCell(3).innerText = voice.LocaleName; row.insertCell(4).innerText = voice.Status; // 插入其他单元格 }); } function setupFilters(voices) { const genderSelect = document.getElementById('gender'); const localeSelect = document.getElementById('locale'); genderSelect.addEventListener('change', () => filterVoices()); localeSelect.addEventListener('change', () => filterVoices()); function filterVoices() { const selectedGender = genderSelect.value; const selectedLocale = localeSelect.value; const filteredVoices = voices.filter(voice => { return (selectedGender === '' || voice.Gender === selectedGender) && (selectedLocale === '' || voice.Locale === selectedLocale); }); displayVoices(filteredVoices); } } }); body { font-family: Arial, sans-serif; } #filters { margin-bottom: 20px; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; }