2010-08-18 49 views
7

我有一個函數中的代碼,並希望縮短它 - 它將相同的樣式應用於數組中的每個項目。Javascript速記方法複製字符串

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

否定答案至今工作(因爲我循環直通代碼??)

通過關於使用僅怎麼以前顯示的幻燈片顯示設定爲隱藏

x = i; 
i = i+1; 

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

神聖的投票,蝙蝠俠! – 2010-08-18 15:10:33

+0

所有人都在這個問題上覆制相同的答案 – 2010-08-18 15:12:00

+0

@Amr:他們是否正在複製不清楚(這是一個明顯的答案,所以可能不會),但他們也不添加任何東西,所以應該已經刪除。 – Shog9 2010-08-18 15:14:48

回答

8

解決它循環:

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

downvote的任何原因?請在回答問題時留下評論。 – 2010-08-18 15:51:03

+0

第一個過去的帖子今天獲得投票! - 謝謝 – Rhys 2010-08-20 00:55:02

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

聲明你的索引變量*在某處*(雖然不一定在for()語句中,因爲它不會創建作用域),這是很好的風格,以避免全局性問題。但是Darin這次擊敗了你...... ;-) – Shog9 2010-08-18 15:10:27

+0

「全力衝刺」4秒(根據我在頁面重新載入時看到的內容)。我沒有打擾刪除,因爲我認爲它強調了這是它的做法。 – gabe3886 2010-08-18 15:13:53

5

只需提供不同的東西,一個jQuery的解決方案:

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

編輯:看起來你可能必須先領取您的DOM引用。 (divsArray真的只是DIV名稱的數組,而不是div的自己?)

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

夥計,你正在問這個答案的麻煩。這是一個艱難的人羣! :)看看評論。 :) – 2010-08-18 15:18:38

+0

@D Hoerster - 哈哈,你沒有錯我剛剛添加了一條評論,並且anwswer被部分刪除了! :) – 2010-08-18 15:35:34

+0

如果'divsArray'是所有的id字符串,它應該是'$('#'+ this).css(「visibility」,「hidden」); 「對嗎? – lincolnk 2010-08-18 16:59:08

4

這聽起來,我認爲有可能是更多的div ......也許我建議這種變化Darin的代碼:

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

獲得divs的好點數Array.length – 2010-08-18 15:36:28

+0

我原則上喜歡這個,雖然嚴格地說它不是必然代替OP寫的內容。 – Shog9 2010-08-18 15:36:40

+1

我不會使用'divsArray.length',除非OP明確表示他想要使用數組中的所有元素。如果他只想要前四個元素呢?但無論如何這是一個好點。 – 2010-08-18 15:54:27

4

在這裏,它是如何工作在兩個PrototypeMootools

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

爲什麼downvote?我看不到這是重複的... – 2010-08-18 15:53:38

4

你可以把下面的函數在divsArray相同/後裔範圍。

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

然後,你可以做任何

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

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

它看起來毫無意義的,但如果你有多個陣列一樣,你可能需要修改你的函數是這樣的:

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

and loop通過任何這樣的數組:

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

而且沒有,有沒有宏也沒有模板。

+0

非常有創意,+1提供了一個有趣的答案。 – sworoc 2010-08-18 16:06:37

1

只要我們都堆砌,我會採取最直接的方法: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'; 

,公正地反其道而行:

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

我做不到「抵制」挑戰。我會說,你加入他們同班,並完成類似(試製例):

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

+1爲調用,沒有想到的,但除了你正在做假設(也許沒有一個共同的CSS類或可能有,它也被其他組件使用)。所以你必須找到一種方法來首先將一個ID數組轉換爲元素地圖。我的猜測是arrayOfIds.map($)。invoke(),但我不確定。 – 2010-08-18 21:30:43

0

我們可以遍歷包含使用Array.prototype.forEach()id列數組和ES6的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>