2016-07-22 10 views
-3

内の文を、私はDOMから、これらの2 VARS取得していた場合:jQueryのセレクタ

var get_category = $('#category').find('.current').attr('rel');        
var get_subcategory = $('#subcategory').find('.current').attr('rel'); 

をし、私は私のDOM内のクラスを見つけて、それに

$('.filter-result').find('.'+get_category, '.'+get_subcategory).show(); 

を表示するためにここにしたい。しかし、私は必要.find()内でそれを書くために、変数が

+2

変数が存在する場合のみですか? – zzzzBov

+0

@zzzzBovを詳しく説明してください:彼は 'get_category'や' get_subcategory'を意味すると思います。 –

+1

@RocketHazmat、あなたは物事を引き受ける人々について何を言うのか知っています...:p – zzzzBov

答えて

1

存在している場合にのみ、私はそれは、あなたの質問に答える願っています:

var get_category = $('#category').find('.current').attr('rel');        
var get_subcategory = $('#subcategory').find('.current').attr('rel'); 

var classes = []; 

if (get_category) { 
    classes.push('.' + get_category); 
} 

if (get_subcategory) { 
    classes.push('.' + get_subcategory); 
} 

//if get_category or get_subcategory were found 
if (classes.length) { 
    $('.filter-result').find(classes.join('')).show(); 
} 
+0

いいえ、それは正しく機能していません、あなたは( '.get_category')を意味するのですか? –

+0

私は複数のクラスを持つdivを見つける必要があります:$( '。filter-result')。find( '。category.sub'); –

+0

@NelsonDenver ** find **コール内のそれらのクラスは、どこから来たのですか? **#category **と**#subcategory **のrel属性で見つかった要素にクラスがあり、この要素のクラスを** find **メソッドに追加する必要があることを意味しますか? –

0

あなたが唯一.find機能にget_categoryまたはget_subcategoryを使用したいという意味であれば、あなたは、次を使用することができます。これはあなたのために働く

var lookup = [ 
    get_category||"", // get_category or bust! 
    get_subcategory||"" // get_subcategory or bust! 
]; 

lookup.map(x=>"."+x); // Add Suffix "." 
lookup.filter(x=>x=="."); // Check if it's only a ".", if so remove. 

$('.filter-result').find.apply(this, lookup).show(); 
// Apply variables in 'lookup' 

希望。

0

私はGabrielsの答えが好きです。なぜなら、うまく機能し、拡張可能な別のオプションが非常に単純なので、別のセレクタを追加してセレクタ配列に追加するからです。 JavaScriptのフィルタとマップ配列のメソッドを使って少し高度です。

var get_category = $('#category').find('.current').attr('rel');        
var get_subcategory = $('#subcategory').find('.current').attr('rel'); 

var selectors = [get_category, get_subcategory]; 

var query = selectors.filter(function(elem) { 
    if (elem) { return elem }; 
}).map(function(elem){ 
    return '.' + elem; 
}).join(', ') 

$('.filter-result').find(query).show();