-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 に答える