2012-06-28 35 views
10

Sto cercando di nascondere elementi con lo stesso nome di classe (float_form), ma sto anche cercando di usare lo script qui sotto per mostrarli (tutte le div di classe float_form sono inizialmente nascoste). Ho esaminato molte soluzioni jquery, ma non riesco a far funzionare nessuno di loro per questo.Nascondere tutti gli elementi con lo stesso nome classe?

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; 
} 
​ 

Edit: Scusate se non fosse chiaro, io non intendo utilizzare jQuery (e so che questo non è jquery). Sto cercando un modo per usare javascript per riconoscere nomi di classi ripetute che non sono in stile = display: none; senza compromettere l'elemento ID mostra/nascondi poiché esiste un ciclo con l'ID div come chiave. L'html per il div è simile al seguente, con {item.ID} come un ciclo while.

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

Il codice ha zero jQuery. ** JavaScript non è jQuery ** !. Il tuo codice mostrato seleziona un elemento per id, non per nome della classe. In quest'ultimo caso, utilizzare 'document.getElementsByClassName' e scorrere tutti gli elementi nell'elenco restituito. –

+0

@RobW. Aggiungiamo il tag jQuery? Ho risposto sia a vanilla js che a jQuery. – gdoron

+0

Anche dopo la tua modifica è molto, molto poco chiaro, che cosa stai chiedendo \ need. – gdoron

risposta

37

vanilla 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 ma sfortunatamente 'getElementsByClassName' funziona solo sulle versioni recenti dei browser. – undefined

+0

@undefined. Può usare jQuery se lo desidera, o implementare 'getElementsByClassName' se gli piace. Dovrebbe fare molto più impegno nelle sue domande, non so se sta davvero usando jQuery o no. – gdoron

+3

@undefined.Beh, questo è fastidioso, le persone vogliono che tu faccia loro il loro lavoro, e nemmeno passare il tempo a dire quello che vogliono. [Sembra un aiuto vampiro per me] (http://slash7.com/2006/12/22/vampires/) – gdoron

0

Prova:

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; 
} 

demo: showClass("float_form");

+0

Poiché l'elemento ID viene utilizzato per un loop di array, devo mantenere getElementById. Ho provato a utilizzarlo separatamente con un pulsante di input nascosto ma non ha funzionato neanche. – user1489970

+0

@ user1489970 è una nuova funzione 'showClass()', basta mantenere la funzione 'show()' che hai già, e aggiungi questo – mgraph

+0

Ho provato a usarlo separatamente (e analizzando var e in come var f nella funzione originale). Funzionava solo la funzione originale. – user1489970

3

Se stai cercando in jQuery, allora è bene sapere che è possibile utilizzare un selettore di classe all'interno dei parametri di $ e chiama il metodo .hide().

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

Ma se si tratta di uno snodo che stai cercando, utilizzare .toggle();

Ma qui è il mio prendere su una buona ginocchiera senza utilizzando 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'); 

demo qui (clicca " Render "to run: http://jsbin.com/ofusad/2/edit#javascript,html

Problemi correlati