2012-03-21 13 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"; 
}