2016-12-26 6 views
-1

各カードには、 "card player1card ________"または "card player2card _______"のクラス名があり、空白はカード名配列から割り当てられたランダムクラス名です。forループクラス名内の "if文"が定義されていません

すべてのカードをチェックし、それらのクラスが「card player1card」に変更されたplayer1cardであることを確認し、カード名配列から更新されたクラスを取得し、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();  
    } 
} 
+0

なぜあなたはループで再びフェッチしていますか?単に 'card [w] .className'を使用してください。また、私は 'card [w] .classList.indexOf( 'player1card')' – Rajesh

+0

を申し訳ありません.Jajascriptで最も経験が豊富ではありません。詳しくは説明できますか? – evilgenious448

+0

'document.getElementsByClassName'はあなたにリストを返しますそれは 'card'に保存されています。その中の要素にアクセスしたいとします。理想的な方法は、リストを何度も何度も取り出す代わりに、リストからアクセスすることです。 DOMのやり取りは非常に高価で、最小限に抑える必要があります。また、 'classList'は' DOMTokenList'(構造体のような配列)を返し、簡単に検索することができます。文字列マッチングよりも優れています(* className.match *) – Rajesh

答えて

0

ちょうど文脈のために、問題のコードは、別の関数内の関数だっただろう:「未定義の 『className』のプロパティを設定できませんキャッチされない例外TypeError」

は、私はエラーを取得します。だから代わりに私はこのようにしました:

var recruitbuilder = document.getElementsByClassName('recruitbuilder'); 
var f; 
var className = ""; 
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 allocatedcard = cardsnames[Math.floor(Math.random() * cardsnames.length)]; 

for (f = 0; f < recruitbuilder.length; f++) { 
    recruitbuilder[f].onclick = function() { 
     recruitbuilderfunc(p1); 
     displayvaluesp1(p1); 
     if (this.classList.contains('player1card') == true) { 
      className = "player1card"; 
     } else if (this.classList.contains('player2card') == true) { 
      className = "player2card"; 
     } 
     //this.className += " " + cardsnames[allocatedcard]; 

     this.className = "card " + className + " " + allocatedcard; 
     updateimages(); 
    } 
} 
関連する問題