Я думаю, что ваш код немного сложен для понимания, но в соответствии с логикой, которую вы написали во вступлении, я предлагаю использовать следующее:
function updateOrderType(ansType) {
var ansBadge = d3.select("#anstype").selectAll("span.badge");
ansBadge.forEach(function() {
var oElement = d3.select(this);
if (/**CLICKED**/) {
var sText = oElement.text();
if(sText === "right") {
oElement.setAttribute("class", "badge badge-primary");
} else if(sText === "wrong") {
oElement.setAttribute("class", "badge badge-danger");
} else {
oElement.setAttribute("class", "badge badge-secondary");
}
} else {
oElement.setAttribute("class", "badge badge-secondary");
}
}
}
Ваш код перебирал массив ansBadge почти 5 раз, оценивая 1 if оператор в каждом раунде. Мое предложение выше повторяется 1 раз и имеет 3 , если s на вершинах. Вы можете даже улучшить это, если проверяете, щелкнул ли элемент , а не (во внешнем , если ), поскольку это более вероятно.
В этом коде обрабатываются четыре типа элементов:
- нажал и "вправо"> основной
- нажал и "неправильно"> опасность
- щелкнул по любому тексту> вторичный
- без щелчка по тексту> вторичный