2012-03-21 11 views
0

我有一个HTML块:获取一个HTML块的父节点用JavaScript

<div style="text-align:left"> 
    <span>aaaaa</span> 
    <span>bbbbb</span> 
    <span>ccccc</span> 
    <span>ddddd</span> 
</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为aligment。因为在Firefox中我使用execCommand,但工作不正常,因为选择不正确,而不是改变我已经有的div中的文本对齐,它增加了一个新的div。

在此先感谢

+0

'selHTML = tmpDiv.parentNode.innerHTML'? – deed02392 2012-03-21 10:22:50

+0

如果我提醒我,“tmpDiv.parentNode为空” – novellino 2012-03-21 10:24:19

+0

正确。它还没有附加到任何东西。使用outerHTML获取div的所有HTML,包括div。 – 2012-03-21 10:31:12

回答

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; 
+0

是的,但这只是给我的临时股利和所有的内容。我真的不想要的全部内容。我只是想检查这些跨度是否已经由带有文本对齐的div包装。 – novellino 2012-03-21 10:27:50

+0

注意,在Firefox'outerHTML'仅适用于最新的Firefox版本:https://bugzilla.mozilla.org/show_bug.cgi?id=92264 – ZER0 2012-03-21 10:28:57

+0

我想你必须div元素追加到另一个对象,得到那个的innerHTML。 – 2012-03-21 10:33:13

0

你尝试setHTML.parentNode

+0

是的,但当我提醒它时,我得到“undefined” – novellino 2012-03-21 10:25:10

+0

这是因为selHTML是一个字符串。我认为你的意思是tmpDiv.parent。但是,由于tmpDiv尚未附加到任何内容,.parent将为空。 – 2012-03-21 10:28:13

+0

是的,但再次与tmpDiv.parentNode我变空。 – novellino 2012-03-21 10:32:21

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"; 
}