2012-06-28 45 views
10

Tôi đang cố gắng ẩn các phần tử có cùng tên lớp (float_form), nhưng tôi cũng đang cố sử dụng tập lệnh bên dưới để hiển thị chúng (tất cả các lớp div float_form ban đầu bị ẩn). Tôi đã xem xét rất nhiều giải pháp jquery, nhưng tôi dường như không thể làm cho bất kỳ giải pháp nào trong số họ hoạt động được.Ẩn tất cả các thành phần có cùng tên lớp?

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: Xin lỗi nếu nó không phải là rõ ràng, tôi không có ý định sử dụng Jquery (và tôi biết rằng đây không phải là jquery). Tôi đang tìm một cách để sử dụng javascript để nhận ra tên lớp lặp đi lặp lại mà không có trong style = display: none; mà không ảnh hưởng đến phần tử ID show/hide vì có một vòng lặp với id div làm khóa. Html cho div trông giống như dưới đây, với {item.ID} là một vòng lặp while.

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

Mã của bạn có zero jQuery. ** JavaScript không phải là jQuery ** !. Mã được hiển thị của bạn chọn một phần tử theo id, không phải theo tên lớp. Sau này, sử dụng 'document.getElementsByClassName' và lặp qua tất cả các mục trong danh sách trả về. –

+0

@RobW. Chúng ta sẽ thêm thẻ jQuery? Tôi đã trả lời cả hai vanilla js và jQuery. – gdoron

+0

Ngay cả sau khi bạn chỉnh sửa nó rất, rất không rõ ràng những gì là nó mà bạn đang yêu cầu \ cần. – gdoron

Trả lời

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 nhưng không may 'getElementsByClassName' chỉ hoạt động trên các phiên bản trình duyệt gần đây. – undefined

+0

@undefined. Anh ta có thể sử dụng jQuery nếu anh ta muốn, hoặc thực hiện 'getElementsByClassName' nếu anh ta thích. Anh ta nên nỗ lực nhiều hơn trong các câu hỏi của mình, tôi không biết liệu anh ta có thực sự sử dụng jQuery hay không. – gdoron

+3

@undefined.Điều đó thật khó chịu, mọi người muốn bạn biến họ thành công việc của họ, và thậm chí không dành thời gian nói những gì họ muốn. [Nghe như một con ma cà rồng giúp tôi] http://lash7.com/2006/12/22/vampires/) – gdoron

0

Hãy thử:

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

bản demo: showClass("float_form");

+0

Vì phần tử ID đang được sử dụng cho một vòng lặp mảng, tôi cần giữ lại getElementById. Tôi đã cố gắng sử dụng riêng biệt với một nút đầu vào ẩn nhưng nó không hoạt động. – user1489970

+0

@ user1489970 là một hàm mới 'showClass()', chỉ cần giữ hàm 'show()' mà bạn đã có, và thêm – mgraph

+0

Tôi đã thử sử dụng nó một cách riêng biệt (và phân tích var e thành var var vào hàm ban đầu). Chỉ có chức năng gốc đã hoạt động. – user1489970

3

Nếu bạn đang xem xét jQuery, sau đó nó là tốt để biết rằng bạn có thể sử dụng một bộ chọn lớp bên trong các thông số của $ và gọi phương thức .hide().

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

Nhưng nếu đó là một chuyển đổi bạn đang tìm kiếm, sử dụng .toggle();

Nhưng đây là quan điểm của tôi về một chuyển đổi tốt mà không sử dụng 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 đây (Nhấn vào " Hiển thị "để chạy): http://jsbin.com/ofusad/2/edit#javascript,html

Các vấn đề liên quan