2017-01-25 20 views
1

私はjQueryを使ったところからやり直しています。代わりにvanilla JSを使いたいと思います。私は達成したいことをよりよく理解するために、作業用のjQueryをコメントアウトしました。ランダムなpタグを表示する

var quotes = document.getElementsByClassName("quotes"); 

document.getElementById("generate").addEventListener("click", function (event) { 
    var random = Math.floor(Math.random() * quotes.length); 
    quotes.style.visibility = "hidden"; 
    quotes[random].style.visibility = "visible"; 
    //$('.quotes').hide().eq(random).show(); 
}); 

コードを実行するときにランダムな段落タグを表示したいとします。どんな助けでも大歓迎です。

答えて

1

quotes

var quotes = document.getElementsByClassName("quotes"); 

を交換するには、array-likeオブジェクトであり、したがって、style性質を持っていません。

代わりに配列内のそれぞれをループし、visibilityプロパティを変更することができます。

さらに、ループ内の3項演算子を使用して、1項目を表示可能に設定できます。

for(var i = 0; i < quotes.length; i++){ 
    quotes[i].style.visibility = (i==random) ? "visible" : "hidden"; 
} 

は厳密にあなたがVanillaJSにあなたのjQueryの実装をコピーしたい場合、それはあなたがvisibilityなく、変更されなければならないdisplayプロパティです話します。ここ

for(var i = 0; i < quotes.length; i++){ 
    quotes[i].style.display = (i==random) ? "block" : "none"; 
} 

の作業例:あなたはそれをループする必要があるのでhttps://jsfiddle.net/1cog9t3c/1/


var quotes = document.getElementsByClassName("quotes"); 
 

 
document.getElementById("generate").addEventListener("click", function (event) { 
 
    var random = Math.floor(Math.random() * quotes.length); 
 
    for(var i = 0; i < quotes.length; i++){ 
 
     quotes[i].style.display = (i==random) ? "block" : "none"; 
 
    } 
 
});
<div class="quotes"> 
 
test 
 
</div> 
 
<div class="quotes"> 
 
test 2 
 
</div> 
 
<div class="quotes"> 
 
test 3 
 
</div> 
 

 
<button id="generate"> 
 
gen 
 
</button>

+0

私は応答のこの明確な発見しました。私は '=(i == random)について聞くことができますか? "ブロック": "なし"; 'コードの一部?私の現在の理解を少し超えて... また、ありがとう! –

+0

@ JoshuaPPこれは三項演算子です:)。これは基本的に 'if(i == random){return"ブロック "; } else {return "none"; } ' – Curt

+0

ありがとうございました! しかし、私は今より少し大きめの問題を抱えています。私のJSでランダムに選択する見積もりを選択する必要があります。どのように私はこれを行うことができます任意のアイデア?それについて考えながらも、それを理解することはできませんでしたか?しかし別の投稿の価値があるかもしれません。 EDIT:これを達成するために、クラスブロックで任意のpタグを選択する方法を見つける必要があるかもしれないと思うかもしれません。私はコードの動作の仕方をよりよく視覚化できるようになりました。devツールの実際の動作を見てきました。 –

0

var quotes=document.getelemetsByid("quotes").innerhtml; 
0

あなたquotesは、HTMLCollectionあります。

あなたは、配列の各要素に関数を呼び出すためにArray.prototype.forEach.callを使用することができます。

var quotes = document.getElementsByClassName("quotes"); 
 

 
document.getElementById("generate").addEventListener("click", function(event) { 
 
    var random = Math.floor(Math.random() * quotes.length); 
 

 
    Array.prototype.forEach.call(quotes, function(quote) { 
 
     quote.style.visibility = "hidden"; 
 
    }); 
 
    
 
    quotes[random].style.visibility = "visible"; 
 
});
<div class="quotes">quote1</div> 
 
<div class="quotes">quote2</div> 
 
<div class="quotes">quote3</div> 
 
<div class="quotes">quote4</div> 
 

 
<div id="generate"> 
 
    Generate 
 
</div>

関連する問題