Próbuję zmienić klasy wielu rodzeństwa na imprezie Click, niektóre z nich mogą mieć wiele klas dla każdego, ale klasa, którą zamierzam zmienić, jest zawsze pierwsza, więc to właśnie przyszedłem

let classList = event.currentTarget.classList;
    if (classList[0] === 'open'){
      classList[0] = 'close';
      event.currentTarget.classList = classList;
      return;
    }
    let sibllingList = event.currentTarget.parentElement.children;
    for (let i=0;i<sibllingList.length;i++) {
      classList = sibllingList[i].classList;
      if (classList[0] === 'open') {
        classList[0] = 'close';
        sibllingList[i].classList = classList;
        break;
      }
    }
    classList = event.currentTarget.classList;
    if (classList[0] === 'close'){
      classList[0] = 'open';
      event.currentTarget.classList = classList;
    }

Działało to, gdy pracowałem z jedną klasą i używałem nazwy klasy zamiast listy klasy, a funkcja działała dobrze, ale kiedy przełączyłem ją do listy klasy, nie działa i rzuciłem następujący błąd

Niepudonowany TypeError: Nie udało się ustawić indeksowanej nieruchomości na "Domwokenlist": Index Setter nie jest obsługiwany.

0
user1712638 21 luty 2019, 19:07

2 odpowiedzi

Najlepsza odpowiedź

Lista klasy jest własnością tylko do odczytu. Więc nie możesz przypisać jej wartości. Więc otrzymujesz błąd:

Niepudonowany TypeError: Nie udało się ustawić indeksowanej nieruchomości na "Domwokenlist": Index Setter nie jest obsługiwany.

Musisz dodać klasę zamiast tego:

event.currentTarget.classList.add('close')

Aby usunąć klasę, użyj Usuń:

event.currentTarget.classList.remove('open')

W ten sposób nie musisz sprawdzać nazwę pierwszej klasy. Dodanie / usunie wymaganą nazwę klasy.

Uwaga: Usuwanie klasy, która nie istnieje, nie rzuca błąd.

Lub możesz wystarczyć zastąpić:

event.currentTarget.classList.replace('open', 'close')
1
Bhojendra Rauniyar 21 luty 2019, 16:19

Oto spróbuj spojrzeć

var classList = test.classList;
    if (classList[0] === 'open'){
        test.classList.replace('open', "close");
      //event.currentTarget.classList = classList; // dont need this 
    }
    console.log( test.classList)
<div id="test" class="open b test"> <div/>
0
Alen.Toma 21 luty 2019, 16:19