質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2326閲覧

HTMLカスタムデータ属性が「複数あるケース」でのjQueryによる取得

mac_mac

総合スコア17

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/02/04 21:24

このHTMLで「kaori-1」だけ赤くしたいのですが、カスタムデータ属性で指定する場合どう書くべきでしょうか?

html

1<div data-test='{"target_name":"miwa","target_id":"1"}'>miwa-1</div> 2<div data-tset='{"target_name":"kaori","target_id":"1"}'>kaori-1</div> 3<div data-test='{"target_name":"kaori","target_id":"2"}'>kaori-2</div>

下記で出来るつもりなのですが、何がいけないのかわからず躓いています。

jquery

1var target_name = 'kaori'; 2var target_id = '1'; 3 4$("[data-test='target_name':'"+target_name+"'][data-test='target_id':'"+target_id+"']").css('color','red');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/04 21:40 編集

て・・・元のHTMLの作成方針を間違えてるきがするな・・・・ <div data-test-target_name="miwa" data-test-target_id="1">miwa-1</div> 的な作りにするだろう
m.ts10806

2019/02/04 21:41

↑賛成です。わざわざ複雑な定義にする意味がないですね。(回答にしてもいいのでは?)
mac_mac

2019/02/04 22:39

「data-test」「data-test2」などがいくつかあり、その中で「target_name」と「target_id」はjqueryに合わせてワンセットな感じだったのでひとまとめにしてみたんですけど、やはり別の方がいいでしょうかね。
think49

2019/02/04 23:31

まとめるメリットがないように読めますね。JSONはparseしてからループ判定するので、明らかに検索効率が低下しています。 オブジェクトにデータを持たせたいなら、new Map側に持たせるとか、設計方針を見直した方が良いと思います。
mac_mac

2019/02/05 01:07

そうでしたか。ご指摘くださってありがとうございます。
guest

回答3

0

ベストアンサー

こんにちは。

data-test 属性を持っている要素の中で、その属性値のオブジェクトが、指定のtarget_nameおよびtarget_idに合致するかについてfilterすればよいです。

以下では、指定のtarget_nameおよびtarget_idに合致する要素のJQueryオブジェクトを返す関数を作りました。

javascript

1const search = (target_name, target_id) => 2 $('[data-test]').filter( 3 function() { 4 const test = $(this).data('test'); 5 return test.target_name === target_name && test.target_id === target_id; 6 } 7 ); 8

以下は、上記の関数searchの使用例です。

以上、参考になれば幸いです。

投稿2019/02/04 22:33

編集2019/02/04 22:54
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mac_mac

2019/02/04 22:40

一番わかりやすかったです。どうもありがとうございます!
jun68ykt

2019/02/04 22:40

どういたしまして。解決されたようで、よかったです????
guest

0

カスタムデータ属性の用途を間違えているのではないでしょうか。カスタムデータ属性は、JavaScriptにデータを渡す際などに用いられます。
以下で簡単にできるのに、わざわざ複雑にする必要もないかと思います。

HTML

1<div id="t1">kaori-1</div> 2<div id="t2">kaori-2</div> 3<div id="t3">miwa-1</div>

JavaScript

1var target_name = 'kaori'; // これは不要となる 2var target_id = '1'; 3$("#t"+target_id).css('color','red');

投稿2019/02/04 21:49

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mac_mac

2019/02/04 22:36

クラスつけずにできれば楽かなと思ったのですが、やはり用途にあわせて付けた方がいいでしょうかね。ありがとうございます。
guest

0

まあこんなかんじだな。

JSON形式の属性を含めるなんて普通はしない。

HTML

<script src="https://code.jquery.com/jquery-3.3.1.slim.js" integrity="sha256-fNXJFIlca05BIO2Y5zh1xrShK3ME+/lYZ0j+ChxX2DA=" crossorigin="anonymous"></script> <div data-test='{"target_name":"miwa","target_id":"1"}'>miwa-1</div> <div >miwa-1</div> <div data-test='{"target_name":"miwa","target_id":"12"}'>miwa-1</div> <div data-test='{"target_name":"kaori","target_id":"1"}'>kaori-1</div> <div data-test='{"target_name":"kaori","target_id":"2"}'>kaori-2</div>

JQUERY

// <div data-test='{"target_name":"miwa","target_id":"1"}'>miwa-1</div> $(function(){ $("div[data-test*='target_name'][data-test*='miwa'][data-test*='target_id'][data-test*='1']").each(function(){ var json = $.parseJSON( $(this).attr("data-test") ); console.log(json); if (json.target_name == "miwa" && json.target_id == "1") { $(this).css("background-color", "red"); } }); });

投稿2019/02/04 21:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mac_mac

2019/02/04 22:37

なるほどありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問