2012-08-14 13 views
11

この要素から3つのデータ値をすべて取得する方法はありますか?HTML5に複数のdata- {name}属性を持たせることはできますか?

<div id="viewport" 
    data-requires='js/base/paths' 
    data-requires='js/base/dialog' 
    data-requires='js/base/notifier'> 

これは、私が始めているプロジェクトにとって本当に便利です。これで、必要なjsモジュールをロードしてdomにリンクすることができました。私はそれが奇妙に聞こえるかもしれないことを知っているが、私はここで何か新しいことを試みている

+2

<div id="viewport" data-requires='["js/base/paths", "js/base/dialog", "js/base/notifier"]'> </div> 

(単にアレイをこのように取得します:jQuery('#viewport').data('requires'))をjQuery.data()を使用して証明はこちらをデータが必要であることを意味します。私はあなたがそれをすることができるとは思わない。なぜそれらをまとめてみませんか? js/base/paths | js/base/notifier ' –

+0

私はそれらのすべてをまとめておくと思います。 3を書くための唯一の理由は、チームに加わっている新しい開発者には見えるようにすることでした。 –

+0

うまくやればいいでしょう。 –

答えて

3

何か別のものを分けて分割し、それらを分割して配列に入れることができます。

// oops here's plain JS 
var arrayData = document.getElementById('viewport').getAttribute('data-requries'); 
var arr = arrayData.split(','); 

for (i = 0; i < arr.length; i++) { 
    console.log(arr[i]); 
} 

http://jsfiddle.net/S7D2D/1/

16

あなたの質問への答えは、HTMLは、同じ特性の複数のインスタンスをサポートしていないということです。その属性を取得する一般的な方法はすべて、3つのうちの1つだけを取得します。

この問題を解決する通常の方法は、属性の単一のインスタンスを使用し、値として複数のパスを入れることです。パスの場合、通常はセミコロンで区切られます。

<div id="viewport" data-requires='js/base/paths;js/base/dialog;js/base/notifier'> 

そして、コードを使用して、多値属性を配列に分解します。

var requiredPaths = document.getElementById("viewport").getAttribute("data-requires").split(";"); 
+0

このメソッドはFoundationドロップダウンで、 'data-options =" is_hover:true; align:right "'のような複数のデータオプションを使用できるようにします。ありがとう、私は他の場所でこれを行う方法を見つけることができませんでした。 – lwalden

7

data-属性内では、より複雑な構造を使用できます。これに代えて

<div id="viewport" 
data-requires='js/base/paths' 
data-requires='js/base/dialog' 
data-requires='js/base/notifier'> 

あなたがこれを行うことができます:あなたはおそらくhttp://jsfiddle.net/3StZs/

+0

ブラウザがあれば不思議に思ってこのことに悩まされるでしょう... –

+0

@rohit_wason:なぜこれについて心配ですか?このテクニックは数年前から存在していますが、ほとんどの場合、不要なブラウザでさえもサポートされています(ただし、最初は使用しなくてもいいし、第2にjQueryバージョンでサポートする必要があります)。それに関してあなたが特に関心を持っていることは何ですか? jQueryは非常に古いブラウザと互換性があるようですが、古いものが古い場合は古いバージョンのjQueryを使用してサポートする必要があります。 – Tadeck

+0

私の元のコメントは本当に複数の属性を使用していたということでした。私は徹底的に質問を読むとは思わない。私は今参照してください。 –

関連する問題