Ich war vor einigen Wochen hart mit dem gleichen Problem zu arbeiten. Ich habe herausgefunden, dass das Ergebnis bereits eine Liste von Elementen darstellt (falls vorhanden) und man es durch iterieren kann. Ich musste ein jQuery-Plugin erstellen, um nach Teil- oder Volltextstrings zu suchen, was den inneren Text eines beliebigen DOM-Elements wie LI oder H2 bedeutet. Ich habe das erste Verständnis auf seiner Seite: Document.evaluate() | MDN
Nach einigen Stunden habe ich das Plugin ausgeführt: Suche nach dem Wort "Architektur" nur in "p" -Elementen, finden teilweise übereinstimmende Zeichenfolgen ("True" für <p>todays architecture in Europe</p>
) statt Übereinstimmungen des gesamten Textes (<h2>architecture</h2>
).
var found = $('div#pagecontent').findtext('architecture','p',true);
Gefundene Ergebnisse sind normale jQuery-Objekte, die wie gewohnt verwendet werden können.
found.css({ backgroundColor: 'tomato'});
Das Beispiel der Verwendung kann die oben für das Such Trog gesamte Dokument und alle Knotentypen wie folgt aus (Teilergebnisse)
var found = $('body').findtext('architecture','',true);
oder nur exakte
var found = $('div#pagecontent').findtext('architecture');
übereinstimmt, wie dies geändert werden, Das Plugin selbst zeigt eine Variable "es", die den Plural eines einzelnen "e" für "element" darstellt. Und Sie können sehen, wie die Ergebnisse iteriert und in einer Menge von Objekten mit f = f.add($(e))
gesammelt werden (wobei "f" für "gefunden" steht). Der Anfang der Funktion behandelt unterschiedliche Bedingungen, wie die vollständige oder teilweise Suche ("c" für Bedingung) und den Dokumentbereich für die Suche ("d").
Es kann wo auch immer optimiert werden, kann nicht das Maximum an Möglichkeiten darstellen, aber es stellt mein bestes Wissen im Moment dar, läuft ohne Fehler und es kann Ihre Frage hoffentlich beantworten. Und hier ist es:
(function($) {
$.fn.findtext = function(s,t,p) {
var c, d;
if (!this[0]) d = document.body;
else d = this[0];
if (!t || typeof t !== 'string' || t == '') t = '*';
if (p === true) c = './/'+t+'[contains(text(), "'+s+'")]';
else c = './/'+t+'[. = "'+s+'"]';
var es = document.evaluate(c, d, null, XPathResult.ANY_TYPE, null);
var e = es.iterateNext();
var f = false;
while (e) {
if (!f) f = $(e);
else f = f.add($(e));
e = es.iterateNext();
}
return f || $();
};
})(jQuery);
Haben Sie das gelesen? https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript Zeigen Sie Ihren aktuellen Code, wenn Sie Ihr Problem mit dieser Dokumentation nicht beheben können. –
ich werde das durchmachen! @ Quasimodo'sclone –
Konnten Sie das lösen? – Yoiku