2013-05-07 6 views
8

私はたくさんこれを見てきました:jQueryの '#' +データ( "ターゲット")パターン

<a href="#" id="trigger" data-target="content">Click me</a> 
<div id="content">And something will happen here</div> 

JSでは、このように:それが私には少し奇妙に見える

$("#trigger").click(function(){ 
    $("#" + $(this).data("target")).hide(); 
}) 

この文字列の連結を行ってセレクタを作成し、それを使用してターゲット要素を取得します。他のターゲット要素を知る必要のある要素にハンドラを設定するためのJavascriptの優れたパターン(jQueryが利用可能)がありますか?

+1

これは少し厄介だと感じるかもしれませんが、これには何も問題ありません。 – j08691

+1

@ j08691より大きなJSプロジェクトを維持している人々のベストプラクティスに関する経験豊富な議論を探しています。 – spike

答えて

20

: - .tab1など、あなたが再び文字列連結を実行する必要はありませんようにクリックやイベントの中で

+1

ちょうど好奇心から: '$(this).data(" target ")のまわりの' $() 'は本当に必要ですか? – SirDerpington

+3

@SirDerpingtonはい、 'this'はDOM要素であり、' data'関数はありません。 'data'はjqueryの関数なので、' $ 'を使ってjqueryオブジェクトを作成する必要があります。 –

+1

このアプローチのもう一つの利点は、私がもはやidに限られていないことです。どのセレクタも機能します。 – spike

2

はなぜ私の意見では、このようにより良いアプローチを何かをしていない。他の人が示唆しているよう

// Set the target 
$("#trigger").data('target', $('#content')); 

// Get the target 
$("#trigger").click(function(){ 
    $(this).data("target").hide(); 
}) 

あなたはバックエンドからそれを設定している場合は、私は、属性値を持つハッシュが含まれるであろう。

<a href="#" id="trigger" data-target="#content">Click me</a> 

$("#trigger").click(function(){ 
    var target = $(this).data("target"); 
    $(target).hide(); 
}) 
+0

これが完了したら、データ属性はバックエンドから設定されているため使用されます。 –

+0

十分に良い、それは良い点です。 – Gabe

+0

私はマークアップでターゲットを指定することができるように、JSが汎用であることを望みます。私は本当にどうやってHTMLの文字列からjavascriptのオブジェクトに移動するのが最善ののかという疑問に思う。data-targetを実際のjqueryオブジェクトに設定するのが理想的ですが、それを一般的に行うにはどうすればいいですか? – spike

1

セレクタを構築するオプションは常にありますが、セレクタ内の文字列を連結するよりも少し上手です。

$("#trigger").click(function(){ 
    var selector = "#" + $(this).data("target"); 
    $(selector).hide(); 
}); 

あなたが探しているものかどうかは少しわかりません。

あなたは文字列の連結を行うだけで元のために言う data-targetであると同様に、あなたが任意のセレクタを保存することができ #

<a href="#" id="trigger" data-target="#content">Click me</a> 

$("#trigger").click(function(){ 
    $($(this).data("target")).hide(); 
}) 

でIDを保存するのはなぜ

+1

さて、これは文脈に応じてより読みやすくなります。 – spike

0

私はデータを完全にスキップして、優雅な分解を可能にします。あなたは単にあなたが/でも、 "ショー" を使用することができます 、中にあなたがモーダルショーを開始し、隠すためにコードしている任意の

$('#content').modal('toggle'); 

を使用することができます

$("#trigger").click(function(e){ 
    e.preventDefault(); 
    $($(this).attr("href")).show(); 
    // note, i'm purposly not using this.href due to a bug in IE that would return the entire href rather than just the hash 
}) 
2

<a href="#content" id="trigger" data-target="">Click me</a> 
<div id="content">And something will happen here</div> 

機能を直接「隠す」。

あなたはBootstrapと最新バージョンのjQueryを使用していると仮定します。

お楽しみください!

+0

これは私の質問に答えません。問題は、JSで隠す方法や表示する方法ではなく、ダイナミックセレクタターゲットをHTML内に埋め込むためのパターンです。 – spike

0

$(this).attr( 'data-target'、 '#myTarget');

これは私のために働いた

関連する問題