1

実行時に tinymce ドキュメントにスパンを追加しています。

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 メソッドを使用してノードを追加し、目的の要素に append child を使用してノードを 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("blink()", 700) と呼んでいます。ここで、oninit は tinyMCE のパラメーターです。

4

1 に答える 1

3

TinyMCEは、独自のドキュメントを含むiframeを使用して編集できるようにします。

そのため、を使用するdocument.getElementByIdと、間違ったDOMを検索していることになります。

TinyMCEエディタオブジェクトにアクセスできる場合は、ed.getDoc().getElementById()代わりに使用できます。

グローバルアクセスが必要な場合は、TinyMCE.editorsコレクションを使用して特定のエディターにアクセスできます。

于 2013-03-16T16:51:17.177 に答える