私はこのコードを使用している間:ありません(.was_added)、遅すぎるので、逆の方法でそれをやって:ループ行為二回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);
}
しかし、友人は.MSGがいることを私に言いました
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) {}
ただし、コードは最後に2回ボタンを2回追加します。
この動作を実際に理解していません。
質問には関係ありませんが、セレクタの最初の一致を取得するために '[0]'を使用する場合は、 'querySelectorAll'の代わりに' querySelector'を使うことができます。 – Barmar
元のコードがあなたの望みどおりに機能していれば、それだけに固執するべきだと思います。何百もの '.msg'要素を持たない限り、':not(.was_added) 'のパフォーマンスはおそらく目立った違いを生むことはありません。 – Barmar
は、サーバがますます多くの '.msg'を作成する時を過ぎています。それが私が他の方法を試している理由です。 (最初のやり方では何回か起こったことがあります) –