2013-03-25 44 views
-3

如何從數組中獲取每個硬編碼選擇器並使用jQuery hide()方法隱藏它?從數組中獲取硬編碼的jquery選擇器並隱藏它?

function hideAllExcept(except) { 
//Create an array to contain all of the sub navigation elements 
var sub_navigation = new Array(); 
//Get each sub ul element of the main ul and push it to the previously created array 
    $('#navigation_sub ul').each(function(index, element) { 
     sub_navigation.push('$("#' +this.id+'")'); 
    }); 


var x = sub_navigation.length; 


for(var i = 0; i < x; i++) { 
    $(sub_navigation).each(function(index, element) { 
     $(sub_navigation)[0].hide();    
     alert(element); 
     alert(this); 
     this.hide(); 
    }) 

} 
} 
+2

爲什麼你在嘗試使用選擇器時已經有了元素本身?大部分代碼對我來說都沒有意義。你爲什麼在'。每()'使用硬編碼指數('$(sub_navigation)[0]')?爲什麼這段代碼忽略'except'參數? – 2013-03-25 17:27:39

+0

你爲什麼要儲存JavaScript作爲一個字符串,而只是存儲選擇字符串? – 2013-03-25 17:29:10

回答

2

您不需要保存ID,只需緩存包含這些元素的jQuery對象。

var $subnav = $('#navigation_sub ul'); 

... 

$subnav.hide(); 

我注意到你有沒有實際使用您的except參數。如果它是一個合法的選擇,你可以這樣做:

$subnav.not(except).hide(); 

這可能會讓你的整個功能只是這樣的:

function hideAllExcept(except) { 
    $subnav.not(except).hide(); 
    $(except).show(); // assuming that you want to make this one visible 
} 
0

更改此:

sub_navigation.push('$("#' +this.id+'")'); 

要這樣:

sub_navigation.push("#" +this.id); 

而這個:

$(sub_navigation)[0].hide(); 

要這樣:

$(element).hide(); 

因爲你與.each循環刪除不需要的循環。

但有很多更好的方法來處理這個問題。比如緩存jQuery對象爲@Alnitak建議

0

不知道你想要什麼來實現,但這將硬編碼到選擇一個數組,然後隱藏每個元素。

// hardcode selectors 
    var subnav_elements = ["ul#subnav1", "ul#subnav2", "ul#subnav3"]; 

    // for each subnav element, hide it! 
    $(subnav_elements).each(function(){ 
     $(this).hide(); 
    }); 
+1

'的jQuery(selector_array)'是不合法的,除非你致電'的ToString()'陣列上首次將其轉換成一個逗號分隔的列表。而且''.each''''''''''''''''''''''''''''''將會愉快地遍歷整個集合。 – Alnitak 2013-03-25 17:33:51

+0

哎呀,你是對的。當我寫這篇文章時,我知道我在想什麼,但我不知道我爲什麼這麼想。謝謝! – 2013-03-26 16:39:27

+0

您_can_通過元素的數組,只是沒有選擇的數組。 – Alnitak 2013-03-26 16:57:27