eine grundlegende JavaScript-Klasse und Instanz mit Jquery „$ (this)“ für XML-Parser
-
20-09-2019 - |
Frage
Ich bin (langsam) einen XML-Parser für einige „Site-Definition“ Schreiben von Dateien, die eine Website fahren. Viele der Elemente werden auf die gleiche Weise analysiert werden, und ich werde nicht unbedingt die Werte für jeden halten müssen.
Meine Frage ist eigentlich ganz einfach: Wie kann ich jquery Manipulatoren in einer Klasse-Funktion verwenden? Wie kann ich $ (this) passieren? Ich weiß, dass es manchmal zu einem DOM-Objekt verweist und manchmal das jQuery-Objekt, aber ich bin ein bisschen trüb.
Für meine Funktion:
function parseXML(xml) {
$("book, site", xml).children().each(function() {
var label = $(this).get(0).tagName;
var text = $(this).text();
var key = toCamelCase(label);
if ((key in siteData) && (text != -1)){
if (isArray(siteData[key]))
{
$(this).children().each(function (){
var childLabel = $(this).get(0).tagName;
var childText = $(this).text();
var childKey = toCamelCase(childLabel);
if(isArray(siteData[key][childKey]))
{
siteData[key][childKey].push(childText);
}
else {
siteData[key].push(childText);
}
});
}
else
{
siteData[key] = text;
}
};
});
}
});
Ich möchte Ort
var label = $(this).get(0).tagName; var text = $(this).text(); var key = toCamelCase(label);
in einer Klasse, so dass ich etwas tun kann, wie
var child = new Element(); and var subchild = new Element();
und dann Verwendung child.label , child.text and child.key
...
Aber auch hier nicht sicher, wie mit diesen die jquery Methoden verwenden ... Ich habe mehr Knoten zu verarbeiten, und ich will nicht Dinge tun, wie var label = $(this).get(0).tagName; and then var childLabel = $(this).get(0).tagName;
halten
Danke.
Lösung
var app = {};
app.element = function(data) {
return function() {
var _text = data.get(0).tagName, _label= data.text(), _key = toCamelCase(_label);
var that = {};
that.label = function() {
return _label;
}
that.text = function() {
return _text;
}
that.key = function() {
return _key;
}
return that;
}();
};
app.instanceA = app.element($(this));
document.writeln(app.instanceA.label());
Ok, so das funktioniert, aber ich bin mir nicht sicher, ob es der beste Weg ist.