2009-04-22 5 views
6

私は、通常、JavaScriptを書くときにDOM専用の属性に固執しようとしました。 PrototypeからjQueryに切り替えたので、私はAJAXリクエストを処理するための非常に読みやすいコーディング規約を設定できるという点で、独自の属性をさまざまなDOM要素に追加することから、かなり深刻な差をつけることができます。簡単な例としては、これは私が非(X)HTML属性...欠点はありますか?

<div type="book" app_id="13"> 
    <a href="#" action="delete">delete</a> 
</div> 

のようなものを行う。そして、私は、その後、action属性を持つすべての<a>タグを見つけるためにコードを設定typeapp_idを持つ親を見つけ、そしてできることを意味します

CRUD操作を行う...すべて私は追加のコードを記述する必要はありません。

注意すべき落とし穴(厳密にXHTMLの苦情ではないこと以外)やエミュレートする必要がある良い習慣はありますか?私自身の属性名前空間を設定する標準的な方法はどうですか?

答えて

6

this questionによると、XHTML 1.0のXML名前空間の使用は無効です。同じネームスペースに独自の属性を追加することは、XMLが実行される限り、無効になる可能性が高いため、私にとっては悪いようです。

私はこれをやっていたのですが、私はclassrelの属性からマイレージを得るでしょう。たとえば:

<div class="book" id="book_13"> 
    <a href="http://example.com/url/to/delete/non/ajaxily" class="delete">delete</a> 
</div> 
+0

、あなたが言う(視覚的なフィードバックを提供するために、異なるクラスを使用する場合チェックアウトされていない書籍とは異なる背景)、別のラッパー要素が必要であるか、カスタム属性ルートを使用する必要があります。 –

+2

@Don - いいえ、そうではありません。任意の要素に複数のクラスを使用できます。スペースで区切るだけです。 "明日のチェックアウト済みの本"などは完全に有効です。 –

+0

@マーク - あなたは正しいですが、あなたの言うとおりに、望ましくない構文解析が必要です。私はカスタム属性パスを選択する(実際に選択した)。 – BYK

0

私は、このアプローチで間違って何も見えません。実際に私はこれの多くの例を見てきましたが、私自身はこのアプローチを多くのアプリケーションで使用していましたが、バリデーションの問題以外は何の障害にも直面していませんでした。だからあなたは自由に行くと思う=)

+0

あなたは間違いなく、1つ以上のブラウザが動作する要素の名前を使用しているかどうかを調べる必要があります。ほとんどのブラウザは、必ずしも有効ではない(特にIE)場合でも、特定の属性を受け入れます。 – Travis

0

誰かが未知のブラウザーを使っていて、厳密ではなく、標準ではないものに失敗しない限り、無効な属性の追加には何も間違いはありません。これは起こる可能性がありますが...疑問です...

良い方法の1つは、jQuery Metadata Pluginを使用して、属性内から簡単にアクセス可能なキーと値のペアを格納することです。