getElementsByTagName不是函数?

时间:2011-01-06 00:00:13

标签: javascript tinymce

我实际上在上一篇文章中找到了与我问的问题相关的代码,但是,尽管它看起来很容易,但我无法通过doc.getElementsByTagName不是函数错误。以下是示例代码:

var addCssRule = (function() {
        var addRule;

        if (typeof document.styleSheets != "undefined" && document.styleSheets) {
            addRule = function(selector, rule, doc, el) {
                var sheets = doc.styleSheets, sheet;
                if (sheets && sheets.length) {
                    sheet = sheets[sheets.length - 1];
                    if (sheet.addRule) {
                        sheet.addRule(selector, rule)
                    } else if (typeof sheet.cssText == "string") {
                        sheet.cssText = selector + " {" + rule + "}";
                    } else if (sheet.insertRule && sheet.cssRules) {
                        sheet.insertRule(selector + " {" + rule + "}", sheet.cssRules.length);
                    }
                }
            }
        } else {
            addRule = function(selector, rule, doc, el) {
                el.appendChild(doc.createTextNode(selector + " {" + rule + "}"));
            };
        }

        return function(selector, rule, doc) {
            doc = doc || document;

            var head = doc.getElementsByTagName("head")[0];
            if (head && addRule) {
                var styleEl = doc.createElement("style");
                styleEl.type = "text/css";
                styleEl.media = "screen";
                head.appendChild(styleEl);
                addRule(selector, rule, doc, styleEl);
                styleEl = null;
            }
        };
    })();

    addCssRule("ol", "color:red", tinyMCE.Editor[0]);

我很确定代码是正确的。我想我误解了tinymce变量是如何传递的。你觉得怎么样?

3 个答案:

答案 0 :(得分:5)

您传递给函数的第三个参数是tinyMCE.Editor[0] 是否具有getElementsByTagName功能?

答案 1 :(得分:2)

你的代码看起来很好,虽然我认为在你的情况下,addCssRule的最后一个参数不是DOM元素。至少是导致这种错误的原因。

答案 2 :(得分:1)

这里的问题是

<强> 1。您不使用文档作为第三个参数来调用您的函数 - 它是一个编辑器实例。 要解决此问题,您应该使用addCssRule("ol", "color:red", tinyMCE.Editor[0].getDoc());addCssRule("ol", "color:red", tinyMCE.get(editor_id).getDoc());

<强> 2。您正在查看函数内的错误文档。您所做的是查看主窗口文档,而不是编辑器实例iframe的文档(这是您希望css规则适用的文档)!你也需要在tinyMCE.Editor[0].getDoc()进行评估。