Html 为什么删除段落时会丢失某些跨度属性?

Html 为什么删除段落时会丢失某些跨度属性?,html,contenteditable,Html,Contenteditable,我有一个简单的HTML,如下所述。删除第一段时(三次单击并点击delete)。“span2”流入“FirstPara”,我看到像“id”和“class”这样的属性没有被保留。为什么会这样?有没有办法阻止这种情况发生 第一段 第二段 第三副 我认为这是因为,如果您三次单击,您将选择创建“SecondPara”的空白并将其删除。保持第一个和第二个端点的开始=对于浏览器第一个完整 我在使用Span放置段落并更改此Span的css中看到的解决方案。问题是,选择范围从textNode的开头

我有一个简单的HTML,如下所述。删除第一段时(三次单击并点击delete)。“span2”流入“FirstPara”,我看到像“id”和“class”这样的属性没有被保留。为什么会这样?有没有办法阻止这种情况发生


第一段

第二段

第三副


我认为这是因为,如果您三次单击,您将选择创建“SecondPara”的空白并将其删除。保持第一个和第二个端点的开始=对于浏览器第一个完整


我在使用Span放置段落并更改此Span的css中看到的解决方案。

问题是,选择范围从textNode的开头开始,到#SecondPara:

var sel=window.getSelection();
var范围=选择范围(0);
range.startContainer;//TextNode:“第一段”
range.startOffset;//0;
range.endContainer;//

range.endOffset;//0

解决此问题的唯一方法是手动将选择更改为仅包含#FirstPara,但这可能会有点棘手,使其在所有条件下都能工作(您必须考虑反向选择、浏览器兼容性等)。请参见类似问题作为起点:

什么浏览器和操作系统?在其他浏览器/操作系统上会发生这种情况吗?我在Windows 8上的Chrome 42中看到了这种情况。我在Chrome 42、Chrome Canary 44、Mac OStanks JosiahDaniels上的Safari 8中观察到了这种情况。你是对的,如果是这种情况,那么SecondPara是否有多个跨距是否重要?因为我看到的是用以下内容替换标记,

的行为不一样。事实上,它保留了这些属性。

secondparagration DummySpan

我可以肯定地看到,向SecondPara添加更多的跨距可以改变一切。我对浏览器的元素合并/删除算法不是很有信心,但SecondPara包含两个跨度的事实肯定会有所不同。
var sel = window.getSelection();
var range = sel.getRangeAt(0);
range.startContainer; // TextNode: "FirstParagraph"
range.startOffset; // 0;
range.endContainer; // <p id="SecondPara">...</p>
range.endOffset; // 0