2012-06-28 21 views
10

同じクラス名(float_form)の要素を非表示にしようとしていますが、以下のスクリプトを使って表示しています(float_formクラスのdivはすべて最初は非表示です)。私はたくさんのjqueryソリューションを見てきましたが、私はそれらのどれかをこのために働かせることはできません。同じクラス名のすべての要素を非表示にしますか?

function show(a) { 
    var e = document.getElementById(a); 
    if (!e) 
     return true; 

    if (e.style.display == "none") { 
     e.style.display = "block" 
    } else { 
     e.style.display = "none" 
    } 
    return true; 
} 
​ 

編集:それは明確ではなかった場合申し訳ありませんが、私はjQueryのを使用しない(と私は、これはjqueryのではないことを知っています)。私はjavascriptを使用してスタイルにない繰り返しクラス名を認識する方法を探しています= display:none; div IDをキーにしたループが存在するため、ID要素の表示/非表示を損なうことはありません。 divのhtmlは以下のようになります。{item.ID}はwhileループです。

<div class="float_form" id="{item.ID}" style="display: none;"> 
+0

あなたのコードがゼロのjQueryを持っています。 ** JavaScriptはjQuery **ではありません!表示されたコードは、クラス名ではなくidで要素を選択します。後者の場合、 'document.getElementsByClassName'を使い、返されたリストのすべての項目をループします。 –

+0

@RobW。 jQueryタグを追加しますか?私はバニラjsとjQueryの両方に答えました。 – gdoron

+0

あなたの編集の後でさえ、それはあなたが何を求めているのか非常にはっきりしていません。 – gdoron

答えて

37

バニラjavascript

function toggle(className, displayState){ 
    var elements = document.getElementsByClassName(className) 

    for (var i = 0; i < elements.length; i++){ 
     elements[i].style.display = displayState; 
    } 
} 

toggle('float_form', 'block'); // Shows 
toggle('float_form', 'none'); // hides 

のjQuery:

$('.float_form').show(); // Shows 
$('.float_form').hide(); // hides 
+1

+1ですが残念ながら 'getElementsByClassName'はブラウザの最近のバージョンでのみ動作します。 – undefined

+0

@undefined。彼は望むならばjQueryを使い、好きな人は 'getElementsByClassName'を実装することができます。彼は自分の質問にもっと多くの努力を払う必要があります。実際にjQueryを使っているかどうかはわかりません。 – gdoron

+3

@undefined。まあそれは迷惑な、人々はあなたが彼らの仕事を作ってほしい、と時間を費やすことも彼らが欲しいと言うことはありません。 [私に助けてくれる吸血鬼のように聞こえる](http://slash7.com/2006/12/22/vampires/) – gdoron

0

試してみてください。

function showClass(a){ 
var e = []; 
var e = getElementsByClassName(a); 
for(i in e){ 
    if(!e[i])return true; 

    if(e[i].style.display=="none"){ 
     e[i].style.display="block" 
    } else { 
     e[i].style.display="none" 
    } 
} 
return true; 
} 

はデモshowClass("float_form");

+0

ID要素が配列ループに使用されているので、私はgetElementByIdを保持する必要があります。私は隠された入力ボタンとこれを別々に使ってみましたが、どちらもうまくいきませんでした。 – user1489970

+0

@ user1489970これは新しい関数 'showClass()'です。あなたがすでに持っている 'show()'関数をそのまま残して、これを加えてください。 – mgraph

+0

私は別に使ってみました(var eをvar関数として元の関数に解析しました)。元の関数だけが機能しました。 – user1489970

3

あなたはjQueryのに探しているなら、それはあなたが$のパラメータ内のクラスセレクタを使用することができることを知って良いことですメソッド.hide()を呼び出します。

$('.myClass').hide(); // all elements with the class myClass will hide. 

しかし、それはあなたが探しているトグルだ場合、.toggle();

を使用しかし、ここではjQueryを使用してない良好なトグルが私の感想です:

function toggle(selector) { 
    var nodes = document.querySelectorAll(selector), 
     node, 
     styleProperty = function(a, b) { 
     return window.getComputedStyle ? window.getComputedStyle(a).getPropertyValue(b) : a.currentStyle[b]; 
     }; 

    [].forEach.call(nodes, function(a, b) { 
    node = a; 

    node.style.display = styleProperty(node, 'display') === 'block' ? 'none' : 'block'; 
    }); 

} 

toggle('.myClass'); 

デモはこちら( "クリックしてくださいレンダリング "):http://jsbin.com/ofusad/2/edit#javascript,html

関連する問題