私は簡単なやり方で奇妙な問題を抱えています。その主な機能は、 "ul"に新しい要素を追加し、 "li"をクリックしてそのクラスを変更することです。要素をクリックした後、「i」にfont-awesomeアイコンが追加され、もう一度クリックすると削除されます。追加された要素を上から下にクリックするとうまくいきますが、下から上へクリックすると、最初の要素から上から "i"だけが削除されます。なぜそれが分からないので、私はどんな助けにも感謝します。ここでJavaScript - 不思議なバグで要素が削除されない
は、このバグを再現することができ、ライブデモです: https://michalgrochowski.github.io/to-do/
そして、ここではその行動に責任コードです:
document.getElementById("list").addEventListener("click", function(e) {
if (e.target && e.target.matches("li.item")) {
e.target.className = "itemDone";
var check = document.createElement("i");
check.className = "fa fa-check done";
e.target.appendChild(check);
} else if (e.target && e.target.matches("li.itemDone")) {
e.target.className = "item";
var done = document.getElementsByClassName("done");
var i;
for (i = 0; i < done.length; i++) {
e.target.removeChild(done[i]);
};
};
});
私はFirefoxとクロームでそれをテストしてみたので、それはですブラウザ関連ではなく、コード内の何かでなければなりません。関数内のループに問題があるかもしれないと思っていましたが、変更方法はわかりません。
コンソールにエラーがe.target.removeChild(なさ[I]) 'であると言う:あなたはこれを使って、トラブルを避けることができます削除されるべきノードはこのノードの子ではありません。 "console.logを使って要素がremoveChildメソッドを呼び出そうとしていることを確認してください。 – LordNeo
'e.target.getElementsByClassName(" done "); ' –
Chromeモバイルで再現できませんでした。私にとって機能的に見えます。私は上から下、逆順、ランダムの順番で追加、削除、削除を行うことができます –