-1
每張卡的類名都是「card player1card ________」或「card player2card _______」,其中空格是從cardnames數組分配的隨機類名。for循環類名稱中的「If語句」undefined
我想要代碼檢查所有卡,併爲那些是player1card他們的班級更改爲「card player1card」,然後從cardnames數組更新的類,併爲player2card相同。
所有變量都已預先定義。
我得到的錯誤「遺漏的類型錯誤:無法設置屬性未定義‘類名’」
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