【javascript】WordPressで記事の中にJavaScriptを埋め込んだ時に困った
WordPressで記事の中にJavaScriptを埋め込んだ時に困った
この記事記事を作成した際にJavaScriptでリストを作成する処理を行っています。
自分の他にも困っている人が多くいるようなので、メモです。
JavaScriptを記事の中に埋め込む際、保存時に自動で修正されてしまうようです。
少し調べて分かったことは
・空白行があるとPタグが割り込んでくる
・DIVタグがあると改行される
http://gashubq.com/gashubq-view/wordpress/javascript-no-plugin
自分が作成したJavaScriptの中にはDIVの記述がなかったため、こんな感じで記述しました。
function createTable(){ var dat = ''; var json = ''; var records; var result; var html = ''; // データを読み込む dat = $('#dataSource TextArea').val(); // JSONにする json = jQuery.parseJSON(dat); // テーブルを作成する html += ' <table>'; html += ' <thead>'; html += ' <tr>'; html += ' <td>'; html += ' Name'; html += ' </td> '; html += ' <td>'; html += ' Coverage'; html += ' </td> '; html += ' <td>'; html += ' NumLinesCovered'; html += ' </td> '; html += ' <td>'; html += ' NumLinesUncovered'; html += ' </td> '; html += ' </tr> '; html += ' </thead> '; html += ' <tbody>'; records = json.records; for(var index in records){ var coverage = 0; coverage = Number(records[index].NumLinesCovered) + Number(records[index].NumLinesUncovered); if(records[index].NumLinesCovered != 0){ coverage = Number(records[index].NumLinesCovered) / coverage; }else{ coverage = 0; } html += ' <tr>'; html += ' <td>'; html += ' ' + records[index].ApexClassOrTrigger.Name; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + Math.floor(coverage * 100) + '%'; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + records[index].NumLinesCovered; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + records[index].NumLinesUncovered; html += ' </td> '; html += ' </tr> '; } html += ' </tbody> '; html += '</table> '; // HTMLに追加する result = $('#result'); result.html(html); }
空白行を潰し、DIVタグも使ってないので完璧と思われたのですが、そういうわけでもありませんでした。
更新時に修正されたコードです。
function createTable(){ var dat = ''; var json = ''; var records; var result; var html = ''; // データを読み込む dat = $('#dataSource TextArea').val(); // JSONにする json = jQuery.parseJSON(dat); // テーブルを作成する html += ' <table>'; html += ' <thead>'; html += ' <tr>'; html += ' <td>'; html += ' Name'; html += ' </td> '; html += ' <td>'; html += ' Coverage'; html += ' </td> '; html += ' <td>'; html += ' NumLinesCovered'; html += ' </td> '; html += ' <td>'; html += ' NumLinesUncovered'; html += ' </td> '; html += ' </tr> '; html += ' </thead> '; html += ' <tbody>'; records = json.records; for(var index in records){ var coverage = 0; coverage = Number(records[index].NumLinesCovered) + Number(records[index].NumLinesUncovered); if(records[index].NumLinesCovered != 0){ coverage = Number(records[index].NumLinesCovered) / coverage; }else{ coverage = 0; } html += ' <tr>'; html += ' <td>'; html += ' ' + records[index].ApexClassOrTrigger.Name; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + Math.floor(coverage * 100) + '%'; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + records[index].NumLinesCovered; html += ' </td> '; html += ' <td style="text-align: right;" >'; html += ' ' + records[index].NumLinesUncovered; html += ' </td> '; html += ' </tr> '; } html += ' </tbody> '; html += '</table> '; // HTMLに追加する result = $('#result'); result.html(html); }
酷い状態ですね。
見て分かるように、Table関連のタグの前後で改行されています。
当たり前ですが、この状態では動作しません。
タグの表記で判断していると考え、このように修正しました。
function createTable(){ var dat = ''; var json = ''; var records; var result; var tbl = ''; // データを読み込む dat = $('#dataSource TextArea').val(); // JSONにする json = jQuery.parseJSON(dat); records = json.records; // テーブルを作成する tbl = $(document.createElement("table")); // ヘッダ部分を追加する tbl.append(document.createElement("thead")); tbl.find('thead').append(document.createElement("tr")); // 行にセルを追加する for(var i = 0; i < 4; i++){ tbl.find('tr').append(document.createElement("td")); } $(tbl.find('tr td').get(0)).html("Name"); $(tbl.find('tr td').get(1)).html("Coverage"); $(tbl.find('tr td').get(2)).html("NumLinesCovered"); $(tbl.find('tr td').get(3)).html("NumLinesUncovered"); // 内容部分を追加する tbl.append(document.createElement("tbody")); for(var index in records){ var coverage = 0; var cellIndex = 0; var tr; coverage = Number(records[index].NumLinesCovered) + Number(records[index].NumLinesUncovered); if(records[index].NumLinesCovered != 0){ coverage = Number(records[index].NumLinesCovered) / coverage; }else{ coverage = 0; } // 行を作成する tr = document.createElement("tr"); // 行にセルを追加する for(var i = 0; i < 4; i++){ $(tr).append(document.createElement("td")); } // セルに値を設定する $($(tr).find('td').get(0)).html(records[index].ApexClassOrTrigger.Name); $($(tr).find('td').get(0)).css('text-align', 'left'); $($(tr).find('td').get(1)).html(Math.floor(coverage * 100) + '%'); $($(tr).find('td').get(1)).css('text-align', 'right'); $($(tr).find('td').get(2)).html(records[index].NumLinesCovered); $($(tr).find('td').get(2)).css('text-align', 'right'); $($(tr).find('td').get(3)).html(records[index].NumLinesUncovered); $($(tr).find('td').get(3)).css('text-align', 'right'); // テーブルに追加する tbl.find('tbody').append(tr); } // HTMLに追加する result = $('#result'); result.html(tbl); }
先にタグを作成してから追加するようにしています。
タグの表記を避けるようにすれば、改行等が行われないようです。
配列を使用すればもっと綺麗に書くことができるかと思いますが、やる気の問題ですね。
ソースコードを晒すのは恥ずかしいです。。
No comments.