14

質問よりも意見をお願いしたいのですが、製品リストなど、大量のデータを含む Web ページを作成する必要がある場合、コミュニティは何をすることを推奨しますか? 、並べ替えなど、現在の製品のデータを操作する必要がある場合-価格、タイトル、画像、リンク、およびその他の属性? あなたのプロジェクトではどのようにしていますか?

たとえば、多数の製品を含むページがあり、それぞれに価格、タイトル、説明、画像 (URL)、リンク (URL) という属性があります。ユーザーとのやり取りで使用するデータをどのように保存しますか? 個人的には、次のように各属性をタグに挿入するだけでそれを行いました。

<div class="product" data-product_id="123">
  <div class="pr_title">Title</div>
  <div class="pr_body">Body</div>
  <div class="pr_img"><img src="http://www.www.www/img.png"></div>
  <div class="pr_link"><a href="http://www.stackoverflow.com/">Buy!</a></div>
</div>

このようにして、プレゼンテーション用の html 構造を作成し、次のような方法で jQuery でデータを操作しました。

var url = $('.product').find('.pr_link').find('a').attr('href');

しかし、プロジェクトが大きくなり、各要素にさらに 10 ~ 15 個の属性が追加されると、現在の製品からのデータの取得がかなり複雑になり、コードがほとんど読めなくなりました。

同じ構造を使用することを考えましたが、次のようなオブジェクトにデータを保持します。

var products = {
    1: {
        title: "abc",
        description: "lorem ipsum",
        price: 25.19,
        img: "http://www.www.www/img.png",
        link: "http://www.stackoverflow.com"
    }
}

css を使用したデザインに必要な要素とスタイルのみを使用して、マークアップをできるだけシンプルに保ちます。

<div class="product" data-product_id="123">
  <div class="title">Title</div>
  <div>Body</div>
  <img src="http://www.www.www/img.png">
  <a href="http://www.stackoverflow.com/">Buy!</a>
</div>

そのためonClick、製品の ID を取得し、オブジェクト「products」でクエリを実行する必要があります。

var url = products[id].title;

これは最も便利な操作方法ですが、新しいオブジェクトが必要です。

もう 1 つのアイデアは、data-次のような親 div 要素の属性にすべてのデータを保持することでした。

<div class="product" data-product_id="123" data-title="abc" data-body="Body">

しかし、私が知っている限りでは、jQuery は (ネイティブに) データ属性をうまく処理できません。

それで、あなたの提案は何ですか?共有するより良いアイデアがあるかもしれません。

PS この件に関する情報をいくつか見つけようとしましたが、うまく定式化する方法を見つけることができなかった可能性が高いため、何も見つかりませんでした。スタック交換サイトにリンクや同様の質問がある場合は、お気軽に投稿してください。前もって感謝します!

4

9 に答える 9

5

HTML5 data各製品ブロックに関連付ける製品のいくつかのプロパティがあるため、属性を使用して製品データを保存できJSON encodeます。オブジェクトを作成して最上位の要素に割り当て、その要素または任意の子要素でのユーザー操作でアクセスできます。

var product = {
    title: "abc",
    description: "lorem ipsum",
    price: 25.19,
    img: "http://www.www.www/img.png",
    link: "http://www.stackoverflow.com"
};
$(selector).data('product',JSON.stringify(product));

次に、任意のイベントのコールバックで実行できるオブジェクトを取得します

$product = $.parseJSON($(elem).data('product'));

実際、 と の両方facebookがデータ属性を使用して、 とtwitterに関連付けられたデータを格納しました。たとえば、FB ストーリーの HTML を次に示します。tweetsstories

<li data-ft='{"qid":"5757245005920960301","mf_story_key":"7164261693049558180"}'
 id="stream_story_4fe5d7d51bc415443080257">

facebook が JSON でエンコードされたデータをdata-ft属性に格納していることがわかります。

同様に、Twitter tweethtmlの例

<div data-tweet-id="216534496567230464" data-item-id="216534496567230464" 
data-screen-name="onimitch" data-user-id="123682011" data-is-reply-to="">

そのため、twitter はツイートの関連データを 、 などのさまざまな属性に保存していdata-tweet-idますdata-user-id

どちらも大量のデータを処理するため、どちらの方法を使用しても、パフォーマンスの問題なしにデータを保存できると思います。

個々のキーを使用してデータを保存する場合.data()は、@ nnnnnn がコメントで既に述べたように、自動データ変換に注意してください。

.data() を使用したデモ: http://jsfiddle.net/joycse06/vcFYj/

.attr() を使用したデモ: http://jsfiddle.net/joycse06/vcFYj/1/

于 2012-06-23T15:19:32.787 に答える
3

DOM 内で ID や参照を使用する必要はありません。清潔に保ちます。

jquery で data() 関数を使用して、それを html 要素にバインドするだけです。そうすれば、各要素をクリックすると、クリックイベント内からこれを呼び出すことでオブジェクトを取得できます。

//loop through your elements in the dom or build them dynamically. 
$.each('div.products', function(){
 $(this).data('product', <your data>);
};

//assign a handler to each element and grab the data object by using this. :)
$(container).delegate('.products', 'click' function(){
  console.log($(this).data('product'))
});
于 2012-06-18T01:25:09.257 に答える
2

データをオブジェクトに保持し、それを HTML に埋め込むことはお勧めしません。

これには次の理由があります。

  • あなたのデータは、すべてのハッカーに盗まれる可能性があります。
  • データが大きすぎてフェッチできない場合、最初はデータなしでページが読み込まれる可能性があります。これは Web 開発者が望んでいないことです。
  • 繰り返しますが、データが大きすぎる場合は、古いコンピューター (約 512M Ram- デッドロックになる可能性があります
  • 繰り返しになりますが、データが大きすぎると、トラバースまたはソートに時間がかかりすぎる可能性があります。

あなたのデータは少なくとも約5分間静的であることを理解しています..私が推奨するのは、

  • サーバーサイド言語(PHP、ASP(.NET)、Pythonなど)でデータを配置
  • スクリプトで必要な場合は、クエリを使用してデータを個別にフェッチします。
  • 必要のないものはすべてユーザーにとってコストがかかります。ユーザーはブラウザーに大量のページを持っている可能性があり、デッドロックの原因にもなります。

ps詳細は、私があなたをもっと助けるのに役立ちます.

于 2012-06-20T10:51:46.860 に答える
1

オブジェクトツリー全体をトラバースする必要はありません。IDを入れるのはどうですか:

<div class="pr_link" id='id_link_123'><a href="http://www.stackoverflow.com/">Buy!</a></div>

そして、それらを次のように取得します。

// ....
var id = 123;
// ....
var url = $("#id_title_" + id + " a").attr('href');
于 2012-06-17T22:04:07.793 に答える
1

AngularJS を試す必要があります。jQuery とうまく連携し、習得も簡単です。AngularJS には双方向のデータ バインディングが含まれており、新しい属性と要素によって HTML が拡張されています。最後になりましたが、Google による MVC フレームワークです。詳細については、http://www.angularjs.comを参照してください。

于 2012-06-20T09:18:53.910 に答える
1

Enesに同意する必要があります.jqueryコードにデータを埋め込むべきではありません.そうしないと、すでに述べたように、コードはすぐに複雑になり、サポートできなくなります. これには、MVC フレームワークが役立ちます。

http://angularjs.comhttp://backbonejs.orgなど、上記の回答にいくつか言及されていますが、どちらも保証できませんが、問題の解決に役立つかどうかを確認する必要があります。

私は現在、もともとjqueryと生のphpで開発したスクラムウォールアプリケーションをアジャイルツールキットに書き直しています。agiletoolkit (別名、stackoverflow の atk4) を使用して、データベース テーブルにマップするモデル、データを配置するプレースホルダーを含む html テンプレートおよびビュー、およびモデル、フォーム、およびグリッドを追加するページを定義します。javascript と php の間のリンクを提供し、ビューの ajax 更新などの機能を備えています。

html5 機能を使用できますが、これをサポートするのは最新のブラウザーのみであるため、ユーザーが制御された環境 (標準の Web ブラウザーがある単一の会社など) にいない場合、問題が発生する可能性があります。

于 2012-06-26T09:28:07.567 に答える
1

多くの優れたクライアント側 mvc フレームワークがありますが、データ ソース (通常は http サーバー) と DOM の間のインターフェイスを管理するための強力で使いやすいフレームワークであるBackbone.jsを確認してください。要するに、それは「あなたの真実を DOM から遠ざけます

人為的な例として、単純なアドレス帳アプリを作成している場合Contact、サーバーにあるモデルを大まかに (または正確に) ミラーリングするクライアント側のバックボーン モデルがおそらくあるでしょう。

Backbone は、サーバー (または localstorage など) からこれらのContactモデル オブジェクトへの連絡先データ (json、xml など) の要求と解析を管理し、js コールバックを提供して、変更が発生したときに DOM を更新します。これは逆にも機能します。バックボーンは、モデル オブジェクトが変更されたときにサーバーを更新します。これは、すぐに、少し遅れて、またはsave関数を明示的に呼び出したときに行われます。

Backbone は適切なフレームワークではない可能性があります。ただし、独自のソリューションを導入する前に、すべてを確認してください。それでも、次のように感じる場合は、独自のクライアント側 MVC レイヤーを作成できます。

  • 多くの優れた既存の javascript MVC フレームワークの 1 つよりも優れた仕事をすることができます。
  • オーダーメイドのソリューションのみが機能するような固有の問題を抱えている、または
  • クライアント側の MVC、または javascript フレームワークを見つけてください。
于 2012-06-25T00:55:18.603 に答える
0

jQuery を介して HTML の data- 属性を (既に使用しているように) 使用できます。サーバー データから DIV を作成すると、次のようなことができます。

$('.product').data(yourProduct); // yourProduct would be the JSON representation of the data

取得するには:

var url = $('product').data('product-link'); // if the JSON object has a product-link property that is.

あなたのデータがブラウザに公開されているという上記の警告は、もちろんまだ有効ですので、注意してください.

于 2012-06-20T16:27:50.920 に答える
0

DOM と jQuery の組み合わせは、Web が持つ最も強力なものの 1 つです。あなたはそれらすべてを取っているわけではありません。

DOM があなたを助け、あなたのために働くようにします。DOM をより適切に整理します。全部取ってください。あなたの例は、次のように最適化できます。

<div class="product" data-product_id="123">
  <div class="pr_title">Title</div>
  <div class="pr_body">Body</div>
  <img class="prodcut-image" src="http://www.www.www/img.png">
  <a class="product-link" href="http://www.stackoverflow.com/">Buy!</a>
</div>

jQuery で選択するには、次のように簡単に記述します。

var url = $('.product .product-link').attr('href');

あなたの問題は、CSS セレクターの仕組みを忘れていることだと思います。DOM のすべてのレベルに横断する必要はありません。

あなたの例では、いくつかの DIV を外すことができます。リンクはインラインである必要はありません。CSS ルールは、それらを DIV のように機能させることができます。

于 2012-06-20T15:27:57.203 に答える