2011-01-06 5 views
1

Ich fand diesen Code tatsächlich auf einem früheren Post in Bezug auf eine Frage, die ich fragte, obwohl es scheinbar einfach ist, kann ich nicht vorbeikommen doc.getElementsByTagName ist kein Funktionsfehler. Hier ist der Beispielcode:getElementsByTagName keine Funktion?

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]); 

Ich bin ziemlich sicher, dass der Code korrekt ist. Ich denke, ich verstehe falsch, wie die Variable tinymce übergeben wird. Was denken Sie?

+0

Welche Browser geben den Fehler? – SLaks

Antwort

1

Probleme hier sind

1. Sie rufen Sie nicht Ihre Funktion ein Dokument als dritter Parameter verwendet wird - es ist ein Editor-Instanz. dies beheben Sie addCssRule("ol", "color:red", tinyMCE.Editor[0].getDoc()); oder addCssRule("ol", "color:red", tinyMCE.get(editor_id).getDoc()); in Ihrer Funktion auf das falsche Dokument

2. Sie sind reffering verwenden sollten. Was Sie tun, bezieht sich auf das Hauptfenster Dokument und nicht auf das Dokument des Editors Instanzen iframe (das ist derjenige, auf den die CSS-Regel gelten soll)! Sie müssen auch hier auf tinyMCE.Editor[0].getDoc() verweisen.

+0

Ich musste ein wenig bearbeiten, aber das funktionierte sehr gut. Vielen Dank!!! Ich habe mir seit mehreren Tagen den Kopf gehämmert. Tausend Dank. – Micharch54

+0

froh, dass ich helfen konnte – Thariama

2

Ihr Code sieht gut aus, obwohl ich denke, dass in Ihrem Fall das letzte Argument zu addCssRule kein DOM-Element ist. Zumindest würde das einen solchen Fehler auslösen.

5

Der dritte Parameter, den Sie an Ihre Funktion übergeben, ist tinyMCE.Editor[0]. Hat die die getElementsByTagName Funktion?

+0

Die Band von Jacobs streikt wieder! :) –

+0

Weißt du ... Ich denke, ich weiß nicht genug über die Tinymce API, um dir das zu sagen. Ich habe versucht, zu vermeiden, den Namen manuell zu übergeben, weil ich möchte, dass die Funktion so oop wie möglich ist. Ich denke, ich muss mehr darüber herausfinden, wie Tinymce das Objekt tatsächlich speichert. Danke für die schnelle Antwort. – Micharch54

Verwandte Themen