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

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

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

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

jQuery

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

Q&A

解決済

1回答

413閲覧

jqeryでurlを取得し URLにマッチした場合配列でJSONデータをhtmlに書き出す

Lustill

総合スコア7

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/06/21 05:21

編集2018/06/21 08:35

jqeryでurlをlocationで取得し
URLにマッチした場合配列でJSONデータをhtmlに書き出す

URL取得し表示非表示はできたのですが、
配列と組み合わせる方法がわかりません。

■URL取得
url取得⇒hogeの場合htmlの#Area表示

■jsonデータをhtmlに書き出し
urlがhogeの場合⇒jsonからarea1のjsonデータ取得⇒htmlの#Areaにレンダリング

わかりずらく申し訳ないですが、
組み合わせる方法をアドバイスいただけませんか。
よろしくお願いします。

js

1<script> 2//url取得 3var url = location.pathname; 4 $(document).ready(function(){ 5 if(document.URL.match(url)) { 6 $('#Area').show(); 7 } else{ 8 $('#Area').hide(); 9 } 10}); 11//url取得 12 13//html書き出し 14 $(function () {  15 $.ajax({ 16 dataType: "json", 17 url: "data.json", 18 success: function (data) { 19 $("#Area1 div").remove(); 20 area = data.area; 21 var areadiv = $("<div>").attr('class', 'row'); 22 for (i = 0; i < 3; i++) { 23 areadiv.append('<div><p>' + 24 "<img src=" + area[i].img + "/>" + 25 area[i].name + "</p>" + 26 "<p>" + area[i].tel + "</p>" + 27 "<p>" + area[i].mail + "</p></div>"); 28 } 29 areadiv.appendTo("#Area"); 30 } 31 }); 32 }); 33//html書き出し 34</script> 35 36<div id="Area"></div> 37

css

1<style> 2 #Area { 3 display: none; 4 } 5 6 </style> 7

json

1 2 3{ 4 "area1":[ 5 { 6 "name": "hoge1", 7 "tel": "03-2444-xxxx", 8 "mail": "makoto@example.com", 9 "img" : "https://" 10 }, 11 { 12 "name": "hoge2", 13 "tel": "03-4444-xxxx", 14 "mail": "tanaka@example.com", 15 "img" : "https:/" 16 }, 17 { 18 "name": "hoge3", 19 "tel": "03-2222-xxxx", 20 "mail": "hanako@example.com", 21 "img" : "https://" 22 } 23 24 ], 25 "area2":[ 26 { 27 "name": "hoge4", 28 "tel": "03-2444-xxxx", 29 "mail": "makoto@example.com", 30 "img" : "http" 31 }, 32 { 33 "name": "hoge5", 34 "tel": "03-4444-xxxx", 35 "mail": "tanaka@example.com", 36 "img" : "https://" 37 }, 38 { 39 "name": "hoge6", 40 "tel": "03-2222-xxxx", 41 "mail": "hanako@example.com", 42 "img" : "https://" 43 } 44 ] 45

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

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

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

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

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

m.ts10806

2018/06/21 05:23

プログラムコード(およびエラーメッセージ)は質問内容としては最も重要な部分であるため、見やすくしていただけると助かります。<code>ボタン押下→「コード」部分にコードを貼り付け→「ここに言語を入力」に対象言語名記入(エラーメッセージの場合は不要)の手順で「コードハイライト化」してください。(質問編集画面ではリアルタイムでプレビューが表示されるので見ながら調整してください)
m.ts10806

2018/06/21 05:23

質問テンプレート部分の文言が多く残っています。質問内容や意図を読み取る上ではノイズにしかなりませんので、自身の質問に関係のある文章(およびソースコード)のみ残してください。
m.ts10806

2018/06/21 05:31

質問編集画面ではリアルタイムでプレビューが表示されるので見ながら落ち着いて調整してください
退会済みユーザー

退会済みユーザー

2018/06/21 05:35

JSONのフォーマットが壊れています。ご確認の上修正願います。
kei344

2018/06/21 08:14

「配列と組み合わせる」とどのデータのどの部分をどうやって出力するつもりかをもう少し具体的に提示いただけませんか?
kei344

2018/06/21 08:32

data.areaを3件出力するコードを書かれていますが、data.area1とかdata.area.area1とかデータ構造にあわせて処理すればよいだけでは。
guest

回答1

0

ベストアンサー

jqeryでurlをlocationで取得

細かいようですが、location.pathnameは標準オブジェクトのプロパティなのでjQueryは関係ないと思います。
タイトルを読んで「???」となりました。

ソースを読むと、やりたいことは理解できましたので、es7でサクッと書いてみます。
なるべくコメントは書いたので、解説は省きます。
少し気になったのですが、<div class="row">はループの外でよかったですかね?

実際に使う場合はes5に書き直すか、babelでes5に変換してください。

js

1 $(async()=> 2 { 3 /** 初期処理で非表示 */ 4 $(`#Area`).hide(); 5 6 /** マッチしなかった場合の後処理を定義 */ 7 const exit = function(){ 8 $(`#Area`).hide().empty(); 9 }; 10 11 /** json取得 */ 12 const data = await $.ajax({dataType: `json`, url: `data.json`}); 13 14 if( !!data === false ) return exit(); 15 16 /** 第一階層のキー一覧取得 */ 17 const keys = Object.keys(data); 18 19 /** パス取得 */ 20 const pathname = location.pathname; 21 22 /** パスと一致するキーを探す */ 23 const findKey = keys.find( key => pathname.includes(key) ); 24 25 if( !!findKey === false ) return exit(); 26 27 /** @type {{name:string,tel:string,mail:string,img:string}[]}} */ 28 const targetData = data[ findKey ]; 29 30 if( !!targetData === false ) return exit(); 31 32 /** テンプレート定義 */ 33 const template = { 34 $row: $(`<div class="row">`), 35 $item: $(`<div> 36 <p class="img"><img></p> 37 <p class="tel"></p> 38 <p class="mail"></p> 39 </div>`) 40 }; 41 42 /** 掃除はしておく */ 43 $(`#Area`).empty(); 44 45 const $row = template.$row.clone(true); 46 /** 処理開始 */ 47 targetData.forEach( item => 48 { 49 /** テンプレートから複製してインスタンス取得 */ 50 const $item = template.$item.clone(true); 51 52 /** データ投入 */ 53 $(`.img img`, $item).attr(`src`, item.img); 54 $(`.tel`, $item).text(item.tel); 55 $(`.mail`, $item).text(item.mail); 56 57 /** $rowにぶら下げていく */ 58 $row.append($item); 59 } ); 60 /** DOMに挿入 */ 61 $(`#Area`).append($row); 62 63 /** 表示 */ 64 $(`#Area`).show(); 65 }); 66

投稿2018/07/06 03:06

so87

総合スコア764

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

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

Lustill

2018/07/06 03:26

javascript初心者なのでjqeryと一緒になってしまいました。 サクッと回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問