0

我有一个 HTML 块:

<div style="text-align:left">
    <span>aaaaa</span>
    <span>bbbbb</span>
    <span>ccccc</span>
    <span>ddddd</span>
</div>

在我的编辑器中,当我尝试选择这个 div 时,我只选择了跨度而不是 div。所以我使用此代码的选择是:

 sel = parent.document.getElementById('frame').contentWindow.document.getSelection();
 var range = sel.getRangeAt (0);
 var docFragment = range.cloneContents ();
 var tmpDiv = document.createElement ("div");
 tmpDiv.appendChild (docFragment);
 selHTML = tmpDiv.innerHTML;

所以当我提醒(selHTML)时,我得到了我在乞讨中写的跨度的代码。但是这个 HTML 是由一个 div 包裹的。我怎样才能得到这个 div ?

我想要那个,因为我想手动 execCommand 进行对齐。因为在 Firefox 中我使用 execCommand 但不能正常工作,因为选择没有正确完成,而不是更改我已经拥有的 div 中的文本对齐,它添加了一个新的 div。

提前致谢

4

3 回答 3

1

我认为你想要 outerHTML,它应该包含 div 及其所有内容。

selHTML = tmpDiv.outerHTML;

或者

sel = parent.document.getElementById('frame')
  .contentWindow.document.getSelection();  

var range = sel.getRangeAt (0);  
var docFragment = range.cloneContents();  
var tmpDiv1 = document.createElement("div"); 
var tmpDiv2 = document.createElement('div'); 
tmpDiv2.appendChild (docFragment); 
tmpDiv1.appendChild(tmpDiv2); 
selHTML = tmpDiv1.innerHTML; 
于 2012-03-21T10:22:39.400 回答
0

你试过了setHTML.parentNode吗?

于 2012-03-21T10:23:22.223 回答
0

在 Firefox 中,您可以使用范围的commonAncestorContainer属性。所以在你的情况下:

var range = sel.getRangeAt(0);
var container = range.commonAncestorContainer;

if (container && container.tagName === "div" && container.style.textAlign) {
    // it's a div tag with an inline style text-align prop

    // you can also modify the container directly:
    container.style.textAlign = "center";
}
于 2012-03-21T10:39:05.527 回答