2017-06-07 3 views
0

のdocument.getElementByIdクラスは、アレイ全体の代わりに、各要素のアレイの要素がHTMLスパンに表示され、このコードで

<p><span id="sr" class="btn">elements of the array</span></p>

for(var i = 0; i < myarray.length; i++) 
 
{ 
 
\t var sr = (function(val) { 
 
     btn = document.createElement('button'); 
 
     btn.data = val; 
 
     btn.innerHTML = val; 
 
     btn.addEventListener('click', checkAnswer); 
 
     document.body.appendChild(btn); 
 
\t \t return btn.data = val; 
 
    })//(myarray[i]); 
 
document.getElementById("sr").innerHTML = myarray; 
 
}

に適用されます。クラス "btn"で定義されているように、各要素をボタンとして表示する必要があります。ただし、クラスは配列のスタイルを単一のボタンとしてではなく全体として変更します。各ボタンのスタイルを定義する正しい方法は何ですか?

私はdocument.getElementById("sr").innerHTML = myarray.class="btn";を試しました。それは動作しません。確かに正しい構文ではありません。何か案が?

+2

これが混乱です。なぜDOMメソッドを使用してボタンを作成しているだけですか?その配列をスパンのinnerHTMLとして割り当てるのはなぜですか?なぜループ内でリターンを使用しているのですか?ループを実際に終了させたくないのですか?そして、getElementByIdは何かにクラスを "適用"しません...あなたの全体の質問はほとんど意味がありません。 – CBroe

+0

なぜIIFEの呼び出しをコメントしましたか? – guest271314

+0

html要素とjavascriptのコンセプトとCSSの仕組みとの間で混乱しているようです。あなたの質問を言い換えようとするか、あなたが達成したいと思うものの完全な書式化された例 – epoch

答えて

2

達成したいのですか?

let container = document.getElementById('sr'); 
 
let array = ['element1', 'element2', 'element3']; 
 

 
function checkAnswer() { 
 
    console.log('Selected answer: ', this.textContent); 
 
} 
 

 
for (let i = 0; i < array.length; i++) { 
 
    let button = document.createElement('button'); 
 
    button.textContent = array[i]; 
 
    button.addEventListener('click', checkAnswer); 
 
    container.appendChild(button); 
 
}
<p><span id="sr" class="btn"></span></p>

+0

はい、それは私が達成したかったものです。私はvarの代わりにletをよく知っていませんが、動作します。ありがとう。再び、私はたくさんのことを学びました。 – user9

+0

もし 'var'の代わりに' let'を使いたいのであれば、特にブロック(この場合はforループ)を使います。 – PeterMader

2

私が正しくあなたを理解していれば、あなたはmyarray要素を使用して、動的に作成されたボタンにbtnクラスを追加します。

各ボタンのスタイルを定義する正しい方法は何ですか?

私はdocument.getElementById( "sr")を試しました。innerHTML = myarray.class = "btn";

あなたは.dataプロパティを作成するのではなく、element.classList.add('your-class');

var myarray = ["Array", "elements"]; //let's say 
 
for (var i = 0; i < myarray.length; i++) { 
 
    var sr = (function(val) { 
 
    btn = document.createElement('button'); 
 
    btn.data = val; 
 
    btn.innerHTML = val; 
 
    btn.classList.add("btn") 
 
    btn.addEventListener('click', checkAnswer); 
 
    document.body.appendChild(btn); 
 
    return btn.data = val; 
 
    })(myarray[i]); 
 
    //document.getElementById("sr").innerHTML = myarray;//I don't know why this line here? 
 
} 
 

 
function checkAnswer(e){ 
 
}

+0

はい、私の質問を理解しました。しかし、あなたの答えでは、配列の要素の代わりに "配列の要素"が表示されます。しかし私は私たちがもっと近づいていると感じています。私はclassList.addを知らなかった。私が学んだ何か。 – user9

+0

あなたが何かを学んだことをうれしく思います。「配列の要素」は実際にあなたのコードからです。私はその行を削除しました。更新された回答を参照してください。 –

+0

解決策は質問に答えません。配列の要素はスパンに現れなければならない。私はすでに私の初期の解決策でそれをしました。スレッドの目的は、スパンにクラスを適用する方法を知ることです。 – user9

1

使用Element.datasetを使用することができます。 iをIIFEに渡します。あなたが#sr.innerHTMLとして配列myarrayを表示しようとしている場合.innerHTMLStringからArrayをキャストとして、.innerHTMLmyarray設定の最後に先頭と"]""["を連結します。

作成した要素を#srに追加する場合は、document.bodyに要素を追加しないでください。ただし、#srに要素を追加しないでください。

function checkAnswer() { 
 
    console.log(this.dataset.value) 
 
} 
 

 
var myarray = [1, 2, 3]; 
 

 
for (var i = 0; i < myarray.length; i++) { 
 
    (function(val) { 
 
    var btn = document.createElement('button'); 
 
    btn.dataset.value = val; 
 
    btn.className = "btn"; // set `btn` `.className` to `"btn"` 
 
    btn.innerHTML = val; 
 
    btn.addEventListener('click', checkAnswer); 
 
    document.body.appendChild(btn); 
 
    // document.getElementById("sr").appendChild(btn); 
 
    })(i); 
 
} 
 

 
document.getElementById("sr").innerHTML = "[" + myarray + "]";
<p><span id="sr" class="btn">elements of the array</span></p>

関連する問題