6

次の関数を記述するより良い方法はありますか?

ただ持って'#' + div_idいることは私には間違っているように見えます。

function hide_div(div_id) {
    $('#' + div_id).hide();
}
4

6 に答える 6

5

文字列の連結に何らかの形で反対する場合は、代わりにこれを行うことができます。

$(document.getElementById(div_id)).hide();

次のように、完全修飾セレクターを渡すこともできます。

hide_div("#divId");

バニラ Javascript で実行したい場合は、次のようにすることができます。

document.getElementById(div_id).style.display = "none";
于 2012-06-15T07:28:49.340 に答える
4

短い答え:いいえ。少し長く、よりハックな答え: 要素の ID を受け取り、その上で getElementById を返す 1 文字の長い名前を持つ関数を作成し、それを jQuery$()で次のようにラップします。

function i(id) {
    if (document.getElementById(id)) return document.getElementById(id);
    else return "";
}

それで:

$(i(id)).doWhatever();

しかし、正直なところ、次のように考えてください。

$("#" + id)
  12345678

$(i(id))
  12345

それが三文字。その価値はありますか?この 3 人のキャラクターは、あなたにとって本当に重要ですか? document.getElementById(id) (27 文字) を使用しないことで、すでに大幅に節約されています。

于 2012-06-15T07:31:46.480 に答える
2

いくつかの代替方法:

$(['#', div_id].join('')).hide();

$('#'.concat(div_id)).hide();

また、@Thomas は、この代替ソリューションに私を刺激しました:

関数を呼び出すときは、次を使用します。

$.proxy( hide_div, $('#' + div_id) );

// Then, you can do this:
function hide_div() {
    this.hide();
}

これにより、より良い再利用が可能になる場合があります。か否か。

于 2012-06-15T07:30:48.973 に答える
0
function hide_div(div_id) {
    $(div_id).hide();
}

...どこ...

div_id = '#someId';
hide_div(div_id);
于 2012-06-15T07:28:18.407 に答える
0

ユースケースによっては、ID の代わりにオブジェクトを渡すことができます。

$('#someobject').click(function(){
    hideDiv(this);
});
于 2012-06-15T07:40:28.057 に答える
-5

いいえ、それ以上短くすることはできません。# + div_id の代替は次のようになります。

$('[id="'+div_id+'"]')

このクエリは [] 属性セレクターで動作しています。短くなく、きれいではなく、本当に遅いですが、とにかく代替手段です

于 2012-06-15T07:34:09.080 に答える