2013-03-16 192 views
1

我在運行時將一個span添加到tinymce文檔中。新添加的DOM元素返回null

ed.onKeyUp.add(function (ed, e) { 
    sendText(ed, e); 
    ed = tinyMCE.get('editor'); 
    range = ed.selection.getRng(); 

    var newNode = ed.getDoc().createElement("span"); 
    newNode.id = "caret"; 
    ed.getDoc().body.appendChild(newNode); 

    newNode.innerHTML = "|"; 
    newNode.style.color = "black"; 
    range.insertNode(newNode); 
}); 

正如你看到的,我使用的createElement方法,並通過追加孩子委託給我所需的元素將它添加到DOM添加節點。

的問題是,我無法使用找到新添加的元素:

document.getElementById("caret"); 

它返回null。這是爲什麼發生?任何想法我可以做什麼?

編輯:我正在使用document.getElementById(「caret」);在我調用初始化tinyMCE文檔的函數中,因爲我需要這個函數來閃爍自定義插入符號。

這是函數:

function blink() { 
     var caret = document.getElementById("caret"); 

     if (caret.style.color == "transparent") { 
      caret.style.color = "black" 
     } else { 
      caret.style.color = "transparent"; 
     } 
    } 

,我稱它的OnInit:的setInterval( 「閃爍()」,700),其中OnInit的是TinyMCE的參數。

+0

你在插入節點後調用'document.getElementById(「caret」)* *嗎? 'ed.getDoc()。getElementById(「caret」)'工作嗎? – 2013-03-16 16:48:33

+0

我不認識這些('ed.onKeyUp.add','ed.getDoc()'...)。你在使用某種JavaScript庫嗎? – 2013-03-16 16:48:43

+0

@ scott.korin:這是TinyMCE – Dancrumb 2013-03-16 16:49:59

回答

3

TinyMCE使用包含其自己的文檔的iframe進行編輯。

因此,當您使用document.getElementById時,您正在搜索錯誤的DOM。

如果您有權訪問TinyMCE編輯器對象,則可以使用ed.getDoc().getElementById()代替。

如果您需要全局訪問,則可以使用TinyMCE.editors集合來訪問特定的編輯器。

+0

感謝您的回答!真的,你有一個點!但我的blink()函數必須全局可訪問,因此我無法訪問ed! – Bernice 2013-03-16 16:56:59

+0

@Bernice:查看我的更新 – Dancrumb 2013-03-16 17:08:21

+0

OMG非常感謝!它的工作:)你是最好的:) – Bernice 2013-03-16 17:16:13