2016-08-02 3 views
0

Was ich versuche zu tun: Sammeln Sie alle Klassen-und ID-Namen in einem Ace Editor HTML-Skript.Finden Sie alle Klassen- und ID-Namen in einem Ace Editor HTML-Skript

Im Moment ist mein Plan, Benutzeränderungen zu erkennen (.on('change'...)) und das aktuelle Token mit der Cursorposition zu erhalten. Wenn es sich bei dem Token um einen nicht 'unquoted' 'attribute-value' Typ handelt, möchte ich durch vorherige Token iterieren, um das Token 'attribut-name' zu finden, zu dem dieser 'attribute-value' gehört eine Klasse oder eine ID (ich kann nicht einfach die Erstellung eines Attributnamens-Tokens feststellen, weil der Benutzer zurückgehen und die Attributwerte später ändern kann, ohne den Namen zu ändern, und ich muss diese Änderungen erkennen).

Ich kann alles tun, außer um vorherige Tokens zu bekommen. Ich habe eine Dokumentation nachgeschlagen und der TokenIterator soll das können, aber wenn ich versuche, etwas wie var iter = new TokeIterator() zu machen, sagt meine Konsole, dass TokenIterator nicht definiert ist. Ich habe Google immer wieder gesucht, aber keine Ergebnisse gefunden. Wenn die Wahrheit da draußen ist, verwende ich offensichtlich nicht die richtigen Worte, um sie zu finden, aber sie sind die einzigen Worte, die ich habe.

Ist ein Weg in Ace eingebaut, um Token zu durchlaufen? Ich weiß, dass ich nicht alle Eigenschaften und Methoden auf dem Editor-Instanzobjekt sehe, wenn ich es logge, weil ich Methoden in meinem Skript verwenden kann, die ich in diesem Protokoll nicht sehen kann. Gibt es da einen, der tut, was ich will?

Wenn nicht, wie lade ich den TokenIterator? Ich denke, dass etwas ähnliches ging, als ich versuchte SnippetManager eine Weile zurück zu verwenden, und es stellte sich heraus, dass ich tatsächlich hatte, dies zu tun, damit es funktioniert:

var tillPageLoaded = setInterval(function() { // Makes sure page doesn't load forever on startup 
    if(document.readyState === 'complete') { 
     clearInterval(tillPageLoaded); 
     ace.config.loadModule('ace/ext/language_tools', function() { 
      editor.insertSnippet(myString); 
     }); 
    } 
}, 5); 

Ist das die gleiche Art von Situation? Wenn ja, was muss in .loadModules(...) sein? Muss ich irgendwo auf ein Skript verweisen? Muss es auf andere Weise geladen werden?

Gibt es eingebaute Funktionalität für Ace, die schon alles machen würde, was ich will?

Abgesehen davon, wenn jemand bessere Ideen hat, wie man das mit Ace angeht, wären diese sehr willkommen.

Antwort

0

können Sie TokenIterator erhalten, indem

mit
var TokenIterator = ace.require("ace/token_iterator").TokenIterator 

https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/folding/xml.js#L38 ein Beispiel für seine Verwendung finden.

+0

Danke, ich habe das funktioniert. Ich musste dann folgendes tun: 'var iter = new TokenIterator (editor.session, 0, 0);'. Leider habe ich festgestellt, dass es für mich nicht von großem Nutzen sein wird, da Ace seine Token bei jedem Umlauf neu erstellt, sodass ich jedes Mal meine Daten neu aufbauen und erneut Tokens durchfahren muss. – knod

+0

Warum ist das Regenerieren von Tokens ein Problem? es regeneriert nur Token, die aufgrund von Änderungen geändert wurden –

+0

Ich möchte ein Token speichern und es überprüfen können, um zu sehen, ob sich sein Wert geändert hat. Wenn die Token jedes Mal zerstört werden, wenn sie sich ändern, kann ich das nicht tun. Ich müsste das gesamte Dokument jedes Mal auswerten, wenn Änderungen auftreten, um die Token zu erhalten. Vielleicht gibt es eine Möglichkeit, die Erzeugung neuer Token oder die Zerstörung alter Tokens zu entdecken, aber ich weiß es nicht. Es entfernt nur den größten Teil des Vorteils, den ich mit Tokens erzielen wollte. Wenn es keine andere Wahl gibt, werde ich es tun, aber ansonsten ist es vielleicht einfach nicht wert. – knod

Verwandte Themen