1

複数の html dom ドキュメントがあり、いくつかの要素は異なるドキュメントで同じ ID を持っています。渡されたドキュメントをクエリする関数を 1 つだけ書きたいと思います。説明します:

現在、私はこの構造を持っています:

If(document.getElementById('myid1') != null)
// do Something

If(document.getElementById('myid2') != null)
// do Something

If(document.getElementById('myid3') != null)
// do Something

If(document.getElementById('myid4') != null)
// do Something

If(document.getElementById('myid5') != null)
// do Something

If(document.getElementById('myid6') != null)
// do Something

これをより良く構造化する方法はありますか?各ページ (ドキュメント) に対して関数を作成すると、同じことを行う関数が 30 個ほどあるので、グローバル関数を 1 つだけ作成することを考えました。何かアドバイスはありますか?

編集 :

If(document.getElementById('name') != null)
document.getElementById('name').value = name;

If(document.getElementById('company') != null)
document.getElementById('company').value = com;

If(document.getElementById('email') != null)
document.getElementById('email').value = email;

If(document.getElementById('mail') != null)
document.getElementById('mail').value = email;

前もって感謝します。

4

3 に答える 3

3

1 つの JS ファイルを作成し、すべてのページで 1 つの js ファイルをインポートできます。そのJSページで、どのページからのリクエストかを識別できる方法で記述し、それがわかっている場合は、そのページの要素を知るようになります。

于 2013-07-25T04:58:23.690 に答える
3

コメントでは、すべての「何かをする」ビットが行うことはvalueプロパティを埋めることであることに注意してください。よくある構造だと思います。

最も単純な形式では、要素 ID と値のペアのリストを保持して、それらの要素に配置しようとする必要があります。要素 ID は一意になるため、マッピングが適切だと思います。

var values = {
    myid1: "Hello, world! You're looking at the element with the ID of myid1.",
    myid2: "I'm the element with the ID of myid2!"
};

明らかに、手順は要素を探してペアをループすることです。そこにある場合は、値を設定します。それ以外の場合は問題ありません。先に進んでください。

forJavaScript では、 ..ループを使用して、オブジェクト内のペアをループできますin。ただし、自分のプロパティのみを確認する必要があるため、少し注意が必要です。つまり、特定のオブジェクトに属し、他の場所から継承されていないプロパティです。

とにかく、まとめると、次のようになります。

for(var id in values) {
    if(Object.prototype.hasOwnProperty.call(values, id)) {
        var element = document.getElementById(id);
        if(element !== null) {
            element.value = values[id];
        }
    }
}

価値観を超えて

このアプローチは明らかに定数値に対してうまく機能しますが、別の場所から値を取得したい場合があります。このソリューションを動的に計算された値に拡張できますか?

はい。文字列をマッピングの値として保存するのではなく、関数を保存できます。値にアクセスしたい場合は、関数を呼び出すだけで、関数は値を計算するために必要なことを何でも実行できます。新しいマッピングは次のようになります。

var values = {
    // If there's something on the page with an ID of nameDisplay, prompt the
    // user for what to fill it with.
    nameDisplay: function() {
        return prompt("What's your name?", "");
    },
    // If there's an element with an ID of time on the page, fill it with the
    // current time.
    time: function() {
        var now = new Date();
        return now.toString();
    }
};

私たちのループはほとんど変更する必要がありません。value値を与える行を次のように変更するだけです。

element.value = values[id]();

括弧に注意してください。ここで、マッピングに保存した関数を呼び出しています。

于 2013-07-25T05:06:29.270 に答える
2
for(var i = 0; i < max_number; ++i)
{

If(document.getElementById('myid'+i) != null)
// do Something
}
于 2013-07-25T05:02:01.940 に答える