2011-05-21 9 views
2

私はセレクタのセットが渡されていて、そのうちの1つが成功した場合、そのセレクタをもう一度チェックして、トップレベルの要素の下に戻し、見つかった場合はそのイベントを実行します。だから... ...そして、成功したjQueryセレクタを再コールすることは可能ですか?

$('element1, element2, element3').click(function() { 
    $('#header' + successfulElement).addClass('active'); 
    }); 

、ユーザーはそれらのelementsのいずれかに当たる場合(文書全体の複数があるかもしれません)私たちは、同じセレクタを持つ要素が#headerの下にあるかどうかを確認します。

それは意味がありますか?それは複雑に聞こえるが、ここで何か根本的なものが欠けていると私は驚かないだろう。

ありがとうございます。

答えて

1

セレクタのどの部分が特定の要素に一致するかを調べる一般的な方法はありませんが、セレクタが特定のフォームを持っている場合は、特定のプロパティを悪用する可能性があります。各elementNは、HTMLタグがある場合たとえば、あなたはマッチしたタグを回復するためにthis.tagNameを使用することができます。

$('element1, element2, element3').click(function() { 
    $('#header ' + this.tagName).addClass('active'); 
}); 

同様に、あなたがクリックされた要素のクラス名(複数可)を取得するためにthis.classNameを使用することができます。


更新:あなたのセレクタはかなり複雑なので、うちの唯一の方法は、各サブセレクタのための個別のハンドラをバインドするかもしれません。あなたは、自動的にこのようなこれらのハンドラを生成できます。

function bindClick(selector) { 
    $(selector).click(function() { 
    $('#header ' + selector).addClass('active'); 
    }); 
} 

var selectors = [ 'a[href*="/el1"]', 'a[href*="/el2"]', 'a[href*="/el3"]' ]; 
for (var i = 0; i < selectors.length; i++) 
    bindClick(selectors[i]); 
+0

しかし、これは、同じタグまたはクラスを持つ '#head'の下のすべての要素に影響するようです。私はOPがちょうどクリックされたものを望んでいると思う。 – user113716

+0

@patrick dw:私はそれがOPが望んでいるものだと思います - 「そのセレクタをもう一度チェックしたいが、トップレベルの要素の下にもう一度チェックしたい」私が理解しているように、 '#header'以外の要素がクリックされ、' #head'の中で同様の要素を探したいとします。 – casablanca

+0

@casablanca:はい、私はそれがそのように解釈される方法を見ることができます。君の言う通りかもね。 +1 – user113716

3

使用closest()は:

$('element1, element2, element3').click(function() { 
    var $this = $(this); 

    if ($this.closest("#header").length) 
     $this.addClass('active'); 
}); 

またparents()を使用することができますが、それはそれは一致した要素に到達すると停止する以外closest()は、同じ仕事をしていません(それはパフォーマンスが向上)。

0

は完全に(例えば、共有データ - 属性を使用して)共通のいくつかの種類が、その後以下をやって問題の要素を与えることによって、あなたの側のステップを発行することができますか?

$("selector1, selector2, selector3").bind("click", activate); 

function activate(e){ 
    $(".active").removeClass("active"); 
    $("[data-id='" + $(this).attr("data-id") + "']", 
     $("header")).addClass("active").trigger("some event"); 
} 
関連する問題