-4

如何从数组中获取每个硬编码选择器并使用 jQuery hide() 方法隐藏它?

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

}
}
4

3 回答 3

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
}
于 2013-03-25T17:28:04.847 回答
0

改变这个:

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

对此:

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

和这个:

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

对此:

$(element).hide();

并删除不需要的 for 循环,因为您正在使用.each.

但是有更好的方法来处理这个问题。就像@Alnitak 建议的那样缓存 jQuery 对象

于 2013-03-25T17:31:23.057 回答
0

不确定您要完成什么,但这会将选择器硬编码到一个数组中,然后隐藏每个元素。

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

    // for each subnav element, hide it!
    $(subnav_elements).each(function(){
        $(this).hide();
    });
于 2013-03-25T17:31:53.847 回答