2014-05-19 32 views
1

我必須在iframe中顯示的HTML文檔中更改部分文本的樣式。從iframe獲取文本並設置範圍

我有一個json文件,其中應該修改文本的開始/結束/ id。

我的問題是我無法設置文本範圍。

var r = document.createRange(); 
var node = document.getElementById("file").contentWindow.document.getElementById("d1e152"); 
r.setStart(node, 0); 
r.setEnd(node, 12); 

文件是iframe的ID,而d1e152是段落的ID。 它返回「TypeError:Range.setStart的參數1不是一個對象。」 r.setStart()行錯誤。

回答

0

聽起來像node爲空。這可能是由於很多原因之一,但我猜你想在iframe完全加載之前檢索iframe中的元素,所以您需要等待使用window.setTimeout()或事件處理程序。

另一個不是你直接問題的問題是,在iframe的文檔而不是主文檔上創建範圍是一個好主意。根據the spec它應該沒關係,但我肯定在舊瀏覽器中看到問題。現在不記得具體細節。

var iframeDoc = document.getElementById("file").contentWindow.document; 
var r = iframeDoc.createRange(); 
var node = iframeDoc.getElementById("d1e152"); 
r.setStart(node, 0); 
r.setEnd(node, 12); 
+0

它似乎工作,但得到這個'TypeError:Range.setStart的參數1不是一個對象。如果我將'.style.color ='#00CC00'(僅用於測試)追加到'iframeDoc.getElementById(「d1e152」)',它會起作用並且文本被着色。謝謝你的幫助 – Ciotto

+0

@Ciotto:一定還有其他事情正在發生,因爲你所看到的錯誤只有在'node'爲空或者其他非對象的情況下才會發生,如果你嘗試訪問,你會得到一個錯誤它的'style'屬性。 –

+0

我注意到有時候有效,有時候不行。我試過這個:'var iframedoc = document.getElementById(「file」)。contentWindow.document; \t \t \t的setTimeout(函數(){ \t \t \t \t變種R = iframedoc.createRange(); \t \t \t \t VAR節點= iframedoc.getElementById( 「d1e152」); \t \t \t \t r.setStart( 0); \t \t \t \t r.setEnd(node,5); [other.code],500);'它只有在沒有'setTimout()'函數的情況下才有效。也許我用錯了位置?但我非常確定,只有在加載iframe時才運行此代碼,因爲我在此函數之前執行了一些控制。 – Ciotto