ich diesen Code verwendet:While-Schleife Akt zweimal JS
var list = was_talkWindows.querySelectorAll('.msg:not(.was_added)');
var i;
for (i = 0; i < list.length; i++)
{
list[i].className += cssClass;
var btn = document.createElement('button');
btn.setAttribute('type', 'button');
btn.setAttribute('class', 'was_addButton');
btn.addEventListener('click', function() {
was_button_act(this.parentElement);
});
btn.innerHTML = buttonName;
list[i].appendChild(btn);
}
jedoch sagte Freund mir, dass Msg: nicht (.was_added) ist zu langsam, so dass es in der entgegengesetzten Art und Weise tun:
var cssClass = ' was_added';
var buttonName = 'start waiting';
if (was_set_standby_auto == true)
{
cssClass += ' was_standby';
buttonName = 'cancel';
}
try {
var currectMSG = was_talkWindows.querySelector('.msg:last-child');
while (currectMSG.classList.contains('was_added') == false)
{
currectMSG.className += cssClass;
var btn = document.createElement('button');
btn.setAttribute('type', 'button');
btn.setAttribute('class', 'was_addButton');
btn.addEventListener('click', function() {
was_button_act(this.parentElement);
});
btn.innerHTML = buttonName;
currectMSG.appendChild(btn);
currectMSG = currectMSG.previousElementSibling;
}
} catch (err) {}
aber der Code fügen Sie die Schaltfläche zweimal jedes Mal für die letzte.
nicht wirklich dieses Verhalten verstehen.
Nicht relevant für die Frage, aber wenn Sie '[0]' verwenden, um nur die erste Übereinstimmung des Selektors zu erhalten, können Sie 'querySelector' statt' querySelectorAll' verwenden. – Barmar
Wenn Ihr ursprünglicher Code so funktioniert, wie Sie möchten, sollten Sie einfach dabei bleiben. Wenn Sie nicht Hunderte von '.msg'-Elementen haben, wird die Leistung von': not (.was_added) 'wahrscheinlich keinen spürbaren Unterschied machen. – Barmar
als die Zeit vergeht der Server mehr und mehr '.msg' erstellen. Deshalb versuche ich es anders. (In der ersten Weise ist es weniger oft passiert) –