Каждая карта имеет имена классов «card player1card ________» или «card player2card _______», где пустое пространство - это случайное имя класса, выделенное из массива cardnames.«If statement» in for loop имя класса undefined
Я хочу, чтобы код проверял все карты, а для тех, которые являются картой игроков1, чтобы их класс был изменен на «card player1card», а затем обновленный класс из массива cardnames, и тот же для player2card.
Все переменные были предварительно определены.
Я получаю ошибку «Uncaught TypeError: Невозможно установить свойство„имя класса“неопределенных»
var cardsnames = ["recruitbuilder", "allwood", "cabin", "messhall", "mast", "captainsquarters", "schooner", "brig", "frigate", "shipballista", "ram", "crowsnest", "spoondrill", "reinforcements", "recruitgunman", "allgunpowder", "firebarrel", "fireship", "roundshot", "heavyshot", "swivelgun", "chainshot", "mortar", "barrage", "resupply", "smuggler", "blockade", "mutiny", "recruitmerchant", "allgold", "addwood", "addgunpowder", "addgold", "removewood", "removegunpowder", "removegold", "byzantinefire", "slaves", "mercenaries", "ironplating", "coercion", "ascension"];
var w;
var allocatedcard;
var card = document.getElementsByClassName("card");
for (w = 0; w < card.length; w++) {
if (document.getElementsByClassName("card")[w].className.match('player1card')) {
this.className = "card player1card";
var allocatedcard = Math.floor(Math.random() * cardsnames.length);
this.className += " " + cardsnames[allocatedcard];
updateimages();
} else if (document.getElementsByClassName("card")[w].className.match('player2card')) {
this.className = "card player2card";
var allocatedcard = Math.floor(Math.random() * cardsnames.length);
this.className += " " + cardsnames[allocatedcard];
updateimages();
}
}
Почему вы снова забираете петлю? просто используйте 'card [w] .className'. Также я бы предложил 'card [w] .classList.indexOf ('player1card')' – Rajesh
Извините, Rajesh, я не самый опытный с Javascript, не могли бы вы объяснить это более подробно. – evilgenious448
'document.getElementsByClassName' возвращает вам список который сохраняется в 'card'. Вы хотите получить доступ к элементу в нем. Таким образом, идеальным способом является доступ из сохраненного списка, а не выборка списка снова и снова. Взаимодействие с DOM очень дорого, и вы должны держать его до минимума. Также 'classList' вернет вам' DOMTokenList' (массив, подобный структуре), и вы можете легко найти в нем. Его лучше, чем сопоставление строк (* className.match *) – Rajesh