【发布时间】:2012-11-09 00:00:59
【问题描述】:
我有一个 fiddle 显示我的代码在做什么。使用 javascript/jquery 我正在尝试将表格插入到当前插入符号位置的内容可编辑 div 中。我正在使用Tim Down's 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>
【问题讨论】:
-
我的回答似乎没有抓住重点。您希望将插入的表格放置在该精确位置,但关闭并重新打开它周围的所有无效标签?
-
@svidgen 没错!
-
您是否注意到像 Safari 这样的浏览器会尝试自动更正源代码,从而使 JavaScript 匹配与您的实际源代码不同。这在某种程度上是好的,但在您想要修改结构的情况下,当然也很烦人。在我的 Safari 中,您的代码已自动更改为;
<p><a></a></p> <table></table> <a></a>。所以现在你几乎拥有了你已经想要实现的目标,但最后一个<a></a>没有被<p>包裹。浏览器这样做是因为它不能在行内元素中容纳块和怪异display-modes(如表格)。 -
检查我的小提琴(以及它返回的
<body>块(是的,表格的父级神奇地变成了主体:P);jsfiddle.net/Allendar/jBrxb -
50 名声,用于实现可以改变目标范围以包含任何抽象 DOM 节点的 DOM 或 SAX 解析器。 github.com/tinymce/tinymce/tree/master/jscripts/tiny_mce/…
标签: javascript jquery html-table rangy