0

私は、ユーザーがインラインの「ウィンドウ」を介して同じブラウザウィンドウで同じコンテンツの複数のページを開くことができるWebサイトを開発しています。

コンテンツは複数回繰り返すことができるため、IDは同じになる可能性があります。したがって、これらのページを区別できるように、それぞれを「処理」する必要があります。

私は現在、ロード時に次のようにスクリプトに一意のIDを割り当てることによってこれを行います。

var id_key;

 function load_page() {
     id_key++;
     load_script("test.js") //load javascript file
 }
 //test.js:
 $(function () {
     var unique_id = id_key;
     //adds the `unique id ` to the end of all elements  with an id attribute set. ie `mycontainer` becomes `mycontainer_1`
     update_ids(unique_id);

     $("#mybtn_ " + unique_id).click(function () {
         //do stuff
     });
 }

これはほとんどの場合正常に機能しますが、複数のページの読み込みが速すぎると、IDが上書きされて混乱やエラーが発生する傾向があります。

これを行うためのより良いテクニックがあるかどうか疑問に思います。私はbackbone.jsについて聞いたことがありますが、この場合にそれが役立つかどうかはわかりません。

4

2 に答える 2

1

この種の問題を解決するには、いくつかの一般的なアプローチがあります。

  1. サブページをiframes で読み込みます。各 iframe は独自の ID スペースを取得します。すべてのドキュメントが同じドメインからロードされている限り、すべてのフレーム内のスクリプトは変数を介しparent相互に通信できます。

  2. ID は使用しないでください。代わりに、各「ウィンドウ」に ID を与えてから、クラスと親子関係を介してウィンドウ内の要素を見つけます。要素は複数のクラスを持つことができることに注意してください。

    $(selector, win)その後、特定のウィンドウで要素を探すために使用できますwin。ウィンドウは " Selector Context " になります。つまり、jQuery はウィンドウの子のみを検索し、それ以外は何も検索しません。

  3. スクリプトの開始時に、すべての重要な要素を ID で見つけて、JavaScript オブジェクトに保存します。そうすれば、jQuery セレクターを使用せずにそれらにアクセスできます。

    たとえば、ID を持つ任意のものを選択し、window 要素で.data()を使用して保存できます。このセットアップの後、すべての要素は次の方法でアクセスできます$(win).data('id')

于 2013-02-22T13:58:51.917 に答える
0

日付と乱数を連結することで、非常に優れた一意のIDを生成できます。

new Date().getTime() + Math.random()

これは決して完璧ではありませんが、あなたのユースケースではそれで十分だと思います。

ジャックがコメントで述べたように、このIDをgetパラメーターとして新しいウィンドウに渡すことができます。私はかつてこの方法でOSのようなインターフェース全体を実行しましたが、問題なく動作しました。

于 2013-02-22T08:27:19.137 に答える