セレクタ名を参照するためのよりクリーンな方法

以下のコードは動作しますが、クリーナーがあると思われます。

セレクタ名を参照するための任意の代替方法、特に最初の違いはありますか?

jQuery

$(".add_one_more").click(function(){            
            var themsg = $(this).parent().attr('id');            
            $('"#'+themsg+'"').stop().fadeOut("slow",function(){                
                $("#entry_area").stop().fadeIn("slow");
            });

            return false;             
        });

HTML

<div id="entry_area">Form Goes Here</div>
<div id="msg0">
    One Message
    Try Again
</div>
<div id="msg1" style="width: 550px;">
    Another Message
    Try Again
</div>
1
@JMaxありがとう、私は次の時間に行うだろう、認識していませんでした。
追加された 著者 Codex73,
@FelixKlingセレクタ文字列なので、実際には "#someID"にする必要があります。
追加された 著者 Codex73,
@FelixKling完全に理解する。今、$( "#" + themsg)を試したときになぜうまくいかなかったのか不思議です。$( "#" + themsg)
追加された 著者 Codex73,
FWIW、 '"#' + themsg + '"' は、先頭と末尾の二重引用符を含む文字列を作成します。 #someID でなければなりません。
追加された 著者 Felix Kling,
これはセレクタ文字列ですが、コードは $( '"#someID"')と同じですが間違っています。文字列連結では常に文字列が返されるので、 $( '#' + themsg)は正しいでしょう。
追加された 著者 Felix Kling,
いいえ、それは重要ではありません。二重引用符と一重引用符は、JavaScriptでは何の違いもありません。私はそれがうまくいかなかったことを知らない、それはすべきである。
追加された 著者 Felix Kling,
コードが機能する場合は、この種の質問を codereview.stackexchange.com に投稿することができます。
追加された 著者 JMax,

4 答え

親を選択してIDを取得する必要はありません。

    $(".add_one_more").click(function(){                      
        $(this).parent().stop().fadeOut("slow",function(){                
            $("#entry_area").stop().fadeIn("slow");
        });

        return false;             
    });
3
追加された

私はかなりあなたがやっていることが好きですが、私はあなたの周りを移動するには、より弾力性にあなたのJSを作る上で私の考えを追加します。

JS

$("#entry_area, div.message").bind("stop", function(evt){
   $(this).stop().fadeIn("slow");
} );

$(".add_one_more").click(function(evt){   
  $(this).closest("div.message").trigger("stop");
  $("#entry_area").trigger("stop");      
            return false;             
        });

html

<div id="entry_area">Form Goes Here</div>
<div id="msg0" class="message">
    One Message
    Try Again
</div>
<div id="msg1" class="message" style="width: 550px;">
    Another Message
    Try Again
</div>
1
追加された

実際には、私はあなたが結局それを再使用しない場合は id を格納する必要はないと言いたいのですが、

$(".add_one_more").click(function(){            
        var $parent = $(this).parent();            
        $parent.stop().fadeOut("slow",function(){                
            $("#entry_area").stop().fadeIn("slow");
        });

        return false;             
    });

jQueryオブジェクトをvarに格納しなくても、さらに短くすることができます([編集]これはまさにDanielが私がこれを書いている間に投稿したものです)。

0
追加された
ご回答有難うございます。上記に構文エラーがあります。 Javascriptの変数名は、jQueryのセレクタまたは関数を呼び出さない限り、$ signの前にあることはできません。
追加された 著者 Codex73,
@JMaxありがとう、私はこれをたくさんいただきありがとうございます。私のコメントは、エラーを暗示するべきではありませんでしたが、答えは疑問でした。私は$を今後採用する予定です。
追加された 著者 Codex73,
@ Codex73:そうではありません。 $ は任意の変数名で有効な文字です。 jQueryが1文字の変数 $ を使用してメイン関数を割り当てている点を除いて、jQueryにはまったく関連していません。しかし、 j だけでも使用できます。 jQueryは単なるライブラリであり、JavaScriptの機能を制限または拡張することはできません。
追加された 著者 Felix Kling,
@ Codex73:名前に $ を使用することは、このvarがjqueryオブジェクトを参照することを記憶する方法です。ありがとう@訂正のためのフェリックス
追加された 著者 JMax,

いかがですか

var themsg = $(this).parent();
themsg.stop() ...
0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript