2011-01-10 41 views

Trả lời

12

Trong sự vắng mặt của jQuery, tôi sẽ sử dụng một cái gì đó như thế này:

<script> 
    var divsToHide = document.getElementsByClassName("classname"); //divsToHide is an array 
    for(var i = 0; i < divsToHide.length; i++){ 
     divsToHide[i].style.visibility = "hidden"; // or 
     divsToHide[i].style.display = "none"; // depending on what you're doing 
    } 
<script> 

này được lấy từ câu hỏi này SO: Hide div by class id, tuy nhiên khi thấy bạn đang yêu cầu giải pháp JS "old-school", tôi tin rằng getElementsByClassName chỉ được các trình duyệt hiện đại hỗ trợ

+0

Cảm ơn câu trả lời mới cho một câu hỏi cũ! Chắc chắn tốt hơn nhiều với phương pháp dựng sẵn. – MrGlass

0

tôi sử dụng một phiên bản sửa đổi điều này:

function getElementsByClass(nameOfClass) {  
    var temp, all, elements; 

    all = document.getElementsByTagName("*"); 
    elements = []; 

    for(var a=0;a<all.length;a++) { 
    temp = all[a].className.split(" "); 
    for(var b=0;b<temp.length;b++) { 
     if(temp[b]==nameOfClass) { 
     elements.push(ALL[a]); 
     break; 
     } 
    } 
    } 
    return elements; 
}; 

Và JQuery sẽ làm điều này thực sự dễ dàng quá.

+1

kiểm tra getElementsByClassName trong xây dựng sẽ là chất nhầy h hiệu quả hơn. –

11
function getElementsByClassName(classname, node) { 
    if(!node) node = document.getElementsByTagName("body")[0]; 
    var a = []; 
    var re = new RegExp('\\b' + classname + '\\b'); 
    var els = node.getElementsByTagName("*"); 
    for(var i=0,j=els.length; i<j; i++) 
     if(re.test(els[i].className))a.push(els[i]); 
    return a; 
} 

var elements = new Array(); 
elements = getElementsByClassName('yourClassName'); 
for(i in elements){ 
    elements[i].style.display = "none"; 
} 
+0

+1 Regex awesomeness – Ben

+1

Đã kết thúc bằng cách sử dụng phiên bản được sửa đổi này. cảm ơn. – MrGlass

+1

Điều này sẽ được cải thiện bằng cách kiểm tra và sử dụng phương thức 'document.getElementsByClassName()' được tích hợp sẵn có. –

-1

Tôi biết OP không muốn thư viện cấp cao, trừ khi có nhu cầu giới hạn kích thước và tính toán, tôi khuyên bạn nên sử dụng nó ngay cả khi ứng dụng không được sử dụng ở nơi khác trong ứng dụng .

Ví dụ, sử dụng jQuery nó rất đơn giản:

$('.myClass').hide() 
+12

Nếu tôi muốn sử dụng jquery, tôi đã nói như vậy. – MrGlass

+1

Đó chỉ là một gợi ý cho việc xem xét jQuery: Tôi cũng không muốn sử dụng jQuery lúc đầu; vì vậy tôi bắt đầu xây dựng một tập hợp các chức năng tùy chỉnh ngày càng tăng cho nhu cầu của mình. Cuối cùng, tôi nhận ra rằng jQuery đã trình bày các thông số kỹ thuật của tôi và rất nhiều thứ khác mà tôi cần. Vì vậy, tôi đã chuyển sang sử dụng jQuery. – Don

+7

@MrGlass - một lần nữa, cụ thể trong câu hỏi của bạn. Đừng xúc động, hãy tử tế! – Kev

1

Giả sử bạn đang đối phó với một lớp duy nhất cho mỗi phần tử:

function swapCssClass(a,b) { 
    while (document.querySelector('.' + a)) { 
     document.querySelector('.' + a).className = b; 
    } 
} 

và sau đó gọi đơn giản gọi nó với

swapCssClass('x_visible','x_hidden'); 
+0

Hãy xem xét sử dụng 'document.getElementsByClassName' thay vì ghép nối với nhau bộ chọn – shea

14

Câu trả lời trễ, nhưng tôi phát hiện ra rằng đây là giải pháp đơn giản nhất (nếu bạn không sử dụng jQuery):

var myClasses = document.querySelectorAll('.my-class'), 
    i = 0, 
    l = myClasses.length; 

for (i; i < l; i++) { 
    myClasses[i].style.display = 'none'; 
} 

Demo

+0

bạn có một lỗi nhỏ trong mã: ở cuối 2 dòng mã đầu tiên bạn nên có"; " không phải ",". Với mã cố định đó chạy hoàn hảo –

+0

Không phải là lỗi, @alexalex. Tôi khai báo các biến được phân tách bằng dấu phẩy. Xem http: // stackoverflow.com/questions/11076750/what-does-variable-declaration-với-multiple-comma-separated-values-mean-egv để biết thêm thông tin – HoffZ

+1

cảm ơn vì đã chỉ ra cho tôi và xin lỗi vì nhận xét chưa được xác minh chưa được xác minh đầu tiên, tôi đã cố gắng không giúp gì khác :) - Tôi đã học được điều gì đó mới :) –

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