前提・実現したいこと
ここに質問の内容を詳しく書いてください。
新人エンジニアです。
正しく質問できているかどうかも怪しいレベルですのでお手柔らかにお願いします。
現在、jQueryのDataTableを使用してサイドメニューを作成しています。
ですが<tbody>に挿入した<a href="${markerData[i]['url']}">${markerData[i]['name']}</a>`+'<br><br>'+markerData[i]['holecount']+"H"+markerData[i]['greencount']+"G"+"<br><br>"+"カート:"+markerData[i]['ipad_sum']+"台"がサイドメニューに表示されるのですが、DataTableに認識されず、ソートや検索機能が使用できません。
おそらくHTMLの<tbody>に直接<tr><td></td><td></td></tr>を入力すると、DataTableが機能するのですが、document.getElementById('saku').innerHtml=<tr><td></td><td></td></tr>で挿入すると、DataTableが機能せず、認識しません。
どのようにすればDataTableが<tbody>の子要素を認識するんですが賢い方回答お願い致します。
該当のソースコード
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <meta charset="utf-8"> <link rel="stylesheet" href="navimap.css"> <link rel="stylesheet" href="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.css"/> </head> <body> <div id="header"></div> <table cellpadding="0px"> <tr> <td width="30%" style="margin-top:2px;"> <div id="sidebar"> <div id="golf"> <table style="width:100%;heigth:100%;" id="foo-table"> <thead> <tr><th>CD</th><th>name</th></tr> </thead> <tbody id="saku" class="saku1"> </tbody> </table> </div> </div> </td> <td width="70%" ><div id="map"></div></td> </tr> </table> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script> <script src="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.js"></script> <script> var target = document.getElementById('map'); var centerp = {lat: 36.414426 , lng: 139.049106}; function initMap() { map = new google.maps.Map(target, { center: centerp, zoom: 5.7, }); } var markerD = []; // DB情報の取得(ajax通信) // windowオブジェクト(windowオブジェクトの主要なオブジェクトはdocumentオブジェクト,locationオブジェクト),addEventListener()『対象要素.addEventListener(種類、関数、false)』,『イベントを実行することができるメソッド』、DOMContentLoaded『webページを読み込みが完了し時に発動』 window.addEventListener('DOMContentLoaded', function(){ $.ajax({ type: "POST", url: "DB.php", dataType: "json", success: function(data){ markerD=data; setMarker(markerD); }, error: function(XMLHttpRequest, textStatus, errorThrown){ alert('Error : ' + errorThrown); } }); }); var map; var marker = []; var infoWindow=[]; function setMarker(markerData) { // console.log(markerData.length); // 配列(markerData)をgolfid順に並び替える。 const copymarkerData=markerData.sort((a,b) => a.golfid - b.golfid); var icon; var sidebar_html= " "; var url=""; for (var i = 0; i < markerData.length; i++) { var latNum = parseFloat(markerData[i]['lat']); var lngNum = parseFloat(markerData[i]['lon']); // マーカーの位置セット var markerLatLng= new google.maps.LatLng({ lat:latNum, lng:lngNum }); // google.maps.Markerクラスのオブジェクト(marker[i])を作成かつマップ上にマーカーを作成。 marker[i] = new google.maps.Marker({ position:markerLatLng, // マーカーを立てる位置を指定 map: map, // マーカーを立てる地図を指定 icon: icon // アイコン指定 }); // google.maps.InfoWindowクラスのオブジェクト(infoWindow[i])を作成。 infoWindow[i] = new google.maps.InfoWindow({ content:`<a href="${markerData[i]['url']}">${markerData[i]['name']}</a>`+'<br><br>'+markerData[i]['holecount']+"H"+markerData[i]['greencount']+"G"+"<br><br>"+"カート:"+markerData[i]['ipad_sum']+"台" }); // for文の中にvar sidebar_html=""があると毎回初期化される; sidebar_html +="<tr>"+"<td>"+markerData[i]['naviid']+"</td>"+"<td>"+'<a href="javascript:myclick(' + i + ')">' + markerData[i]['name'] +"</a>"+"</td>"+"</tr>"; markerEvent(i); }; document.getElementById("saku").innerHTML = sidebar_html; } ; console.log(document.getElementsByClassName("saku1")); var openWindow; // マーカーをクリックした際の関数 function markerEvent(i) { marker[i].addListener('click', function() { myclick(i); }); } // addlistenerメソッドはコールバック関数を指定する。 // サイドメニューをクリックした際の関数 function myclick(i) { if(openWindow){ openWindow.close(); } infoWindow[i].open(map, marker[i]); openWindow = infoWindow[i]; } // Jqueryのデータテーブル jQuery(function($){ $.extend( $.fn.dataTable.defaults, { language: { url: "http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Japanese.json" } }); $("#foo-table").DataTable({ lengthChange:false, }); }) // '<a href="javascript:myclick('+i+')"> 'はaタグをクリックした場合、myclick関数が実行される。 </script> </body> </html>
回答1件
あなたの回答
tips
プレビュー