私のコードが何をしているかを示すフィドルがあります。javascript/jquery を使用して、現在のキャレット位置でコンテンツ編集可能な div にテーブルを挿入しようとしています。これを実現するために、 Tim Down の Rangyライブラリを使用しています。私は次のjavascriptでこれをやっています。
var range = getFirstRange();
var el = document.createElement("table");
var tableHtml = "";
for (var a = 0; a <= tableY; a++) {
if(a%2==0){
tableHtml += '<tr class="zebra">';
}
else{
tableHtml += '<tr>';
}
for (var b = 0; b <= tableX; b++) {
tableHtml += '<td> </td>';
}
tableHtml += '</tr>';
}
$(el).html(tableHtml);
range.insertNode(el);
rangy.getSelection().setSingleRange(range);
ここで役立つのは getFirstRange 関数です。
function getFirstRange() {
var sel = rangy.getSelection();
return sel.rangeCount ? sel.getRangeAt(0) : null;
}
このテーブルが配置されている場所に有効な html を作成する必要があります。たとえば、キャレットがリンクの途中にある場合、次の html を回避しようとしています。
<p>some text <a href="#">text
<table>
<tr>
<td>table content</td>
</tr>
</table>
text</a> more text</p>
代わりに、このように表示したいと思います。
<p>some text <a href="#">text</a></p>
<table>
<tr>
<td>table content</td>
</tr>
</table>
<p><a href="#">text</a> more text</p>