2010-08-18 31 views
7

Tôi có mã này trong một hàm và muốn rút ngắn nó - nó áp dụng cùng một kiểu cho mọi mục trong một mảng.Cách viết tắt Javascript để sao chép các chuỗi

document.getElementById(divsArray[0]).style.visibility = 'hidden'; 
document.getElementById(divsArray[1]).style.visibility = 'hidden'; 
document.getElementById(divsArray[2]).style.visibility = 'hidden'; 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

NO câu trả lời cho ngày làm việc (Bởi vì tôi đang lặp qua mã ??)

giải quyết nó bằng cách thiết lập chỉ khả năng hiển thị trượt hiển thị trước đây để ẩn

x = i; 
i = i+1; 

document.getElementById(divsArray[x]).style.visibility = 'hidden'; 
+1

Bỏ phiếu bầu, Batman! –

+0

tất cả đều sao chép cùng một câu trả lời cho câu hỏi này –

+0

@Amr: cho dù chúng đang sao chép hay không là không rõ ràng (đó là câu trả lời rõ ràng, vì vậy có thể không) nhưng chúng không thêm bất kỳ thứ gì và vì vậy nên đã bị xóa. – Shog9

Trả lời

8

Làm thế nào về cách sử dụng vòng lặp:

for (var i = 0; i < 4; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+1

Bất kỳ lý do nào cho downvote? Xin vui lòng để lại một bình luận khi downvoting một câu trả lời. –

+0

Trước tiên, bài đăng sẽ được bỏ phiếu ngay hôm nay! - Cảm ơn – Rhys

2
for (i=0;i<4;i++) { 
    document.getElementById(divsArray[i]).style.visibility='hidden'; 
} 
+2

Đó là kiểu tốt để khai báo biến chỉ mục của bạn * ở đâu đó * (mặc dù không nhất thiết trong câu lệnh for(), vì điều đó không tạo ra phạm vi nào) để tránh các vấn đề với globals. Nhưng Darin đánh bại bạn với cú đấm thời gian này ... ;-) – Shog9

+0

"Bị đánh vào cú đấm" của tất cả 4 giây (theo những gì tôi thấy khi trang được tải lại.Tôi không bận tâm với việc xóa như tôi đã thấy nó củng cố quan điểm rằng đó là cách để làm điều đó. – gabe3886

5

Chỉ cần cung cấp một cái gì đó khác, một giải pháp jQuery:

$(divsArray).each(function() { 
    $(this).css("visibility", "hidden"); 
}); 

Chỉnh sửa: Dường như bạn có thể phải thu thập tài liệu tham khảo DOM trước tiên. (DivsArray thực sự chỉ là một mảng của tên div, và không phải là divs mình?)

$(divsArray).each(function() { 
    $("#" + this).css({ "visibility": "hidden" }); 
}); 
+3

Dude, bạn đang gặp rắc rối với câu trả lời đó. Đây là một đám đông khó khăn! :) Kiểm tra các ý kiến. :) –

+0

@D Hoerster - ha ha, bạn không sai, tôi vừa mới thêm một bình luận và anwswer đã bị xóa một phần thông qua! :) –

+0

nếu 'divsArray' là tất cả các chuỗi id, nó phải là' $ ('#' + this) .css ("hiển thị", "ẩn"); 'đúng không? – lincolnk

4

Nghe có vẻ với tôi rằng có thể có nhiều divs ... Tôi có thể đề nghị thay đổi này để mã Darin của:

for (var i = 0; i < divsArray.length; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+0

Điểm tốt trên nhận được divsArray.length –

+0

Tôi thích điều này về nguyên tắc, mặc dù nghiêm chỉnh nói nó không phải là nhất thiết phải thay thế cho những gì OP đã viết. – Shog9

+1

Tôi sẽ không sử dụng 'divsArray.length' trừ khi OP nói rõ ràng rằng anh ta muốn sử dụng tất cả các phần tử trong mảng. Nếu anh ta chỉ muốn bốn yếu tố đầu tiên thì sao? Nhưng đó là một điểm tốt anyway. –

4

và dưới đây là cách nó hoạt động trong cả hai PrototypeMootools:

$(divsArray).each(function(item) { 
    $(item).setStyle({visibility: "hidden"}); 
}); 
+1

tại sao downvote? Tôi không thấy đây là bản sao ... –

4

Bạn có thể đặt các chức năng sau đây trong cùng một phạm vi/hậu duệ của divsArray.

function baka(idx) { 
    document.getElementById(divsArray[idx]).style.visibility = 'hidden'; 
} 

Sau đó, bạn có thể làm một trong hai

baka(0); 
baka(1); 
baka(2); 
baka(3); 

hoặc

for (var i = 0; i < 4; i++) 
    baka(i); 

Có vẻ vô nghĩa, nhưng nếu bạn có nhiều mảng như vậy, bạn có thể muốn thay đổi chức năng của bạn như thế này:

function aho(arr, idx) { 
    document.getElementById(arr[idx]).style.visibility = 'hidden'; 
} 

và vòng lặp qua bất kỳ mảng nào như thế này:

for (var i = 0; i < divsArray.length; i++) 
    aho(divsArray, i); 

Và không, không có macro cũng như không có mẫu.

+0

Rất sáng tạo, +1 để cung cấp câu trả lời thú vị. – sworoc

1

miễn là tất cả chúng ta chồng chất trên, tôi sẽ đưa phương pháp trực tiếp nhất: D

document.getElementById(divsArray[0]).style.visibility = 
document.getElementById(divsArray[1]).style.visibility = 
document.getElementById(divsArray[2]).style.visibility = 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

và chỉ để đi ngược lại các hạt:

var d = null, i = 0; 
while (d = document.getElementById(divsArray[i++])) { 
    d.style.visibility = 'hidden'; 
} 
1

tôi có thể không "chống lại" thách thức.Tôi có thể nói bạn thêm chúng vào cùng lớp và làm điều gì đó tương tự (Prototype ví dụ):

$$('.className').invoke('setStyle', { 'visibility' : 'hidden' }); 
+0

+1 để gọi, không nghĩ về điều đó, nhưng ngoài việc bạn đang đưa ra giả định (có thể không có một lớp css phổ biến hoặc có thể có và nó cũng được sử dụng bởi các thành phần khác). Vì vậy, bạn phải tìm cách chuyển đổi một mảng các id thành bản đồ các phần tử trước tiên. Đoán của tôi sẽ là arrayOfIds.map ($). Invoke() nhưng tôi không chắc chắn. –

0

Chúng ta có thể lặp qua mảng chứa id s sử dụng Array.prototype.forEach() và ES6 của Arrow Functions:

var elemIds = ['two', 'four', 'six']; 
 

 
elemIds.forEach(id => {document.getElementById(id).style.visibility = 'hidden';});
<div id="one">One</div> 
 
<div id="two">Two</div> 
 
<div id="three">Three</div> 
 
<div id="four">Four</div> 
 
<div id="five">Five</div> 
 
<div id="six">Six</div> 
 
<div id="seven">Seven</div>

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