Ricerca di testo all'interno di una pagina web

2

Attualmente sto progettando un algoritmo di ricerca per un documento, e mi sono solo incuriosito mentre progettavo l'algoritmo: in che modo i browser web cercano una pagina web?

Ad esempio, in Google Chrome, puoi premere la scorciatoia da tastiera Ctrl-F per attivare la barra "Trova", che ti consente di cercare una pagina Web specifica per il testo. Come funziona, dato che ha solo il codice HTML grezzo come riferimento?

    
posta gnat 15.02.2013 - 05:44
fonte

1 risposta

1

Quando dici che stai progettando un algoritmo di ricerca per un documento, potresti essere più specifico? Stai facendo all'interno della stessa pagina web o stai facendo questo come un'operazione lato server? Inoltre, stai solo cercando di trovare la pagina / documento che corrisponde meglio o stai cercando un particolare elemento all'interno della pagina da evidenziare, proprio come fanno Firefox e Chrome?

Come menzionato @iglvzx, dovresti esaminare DOM. Ho impostato un esempio molto semplice di seguito per implementare una ricerca su una pagina. Il punto principale che sto cercando di mostrare è la creazione di un oggetto cache che è un hash con l'elemento / nodo DOM come chiave ed è il testo ricercabile come valore. Per quanto riguarda l'attuale algoritmo di ricerca, presumo tu stia costruendo il tuo ma ho un link a un progetto per la ricerca dal vivo in JavaScript che potrebbe essere di valido aiuto.

Sono sicuro che ci sono molti problemi con il codice qui sotto quando si tratta di un'applicazione reale, ma spero che questo possa aiutarti a orientarti nella giusta direzione.

// setup a global search-cache
var cache = null;

/**
 * Public: Generate the cache from the existing page. Note, this may need
 *         to be re-run if the DOM (page) changes.
 *
 * Returns nothing; populates a global cache object
 */
function generate_cache() {
    var cache = {};

    $('body').children().each(function () {
        (function process_node(node) {
            var has_children = node.children().length > 0;
            if (has_children) {
                node.children().each(function () { process_node(this); });
            }
            else {
                cache[node] = node.text();
            }
        })(this);
    });
}



/**
 * Public: Search the cache of the page
 * 
 * value - The value to search for within the cache
 * 
 * Returns the node the text was found in or with the highest score
 * or whatever your search algorithm does.
 */
function search (value) {
    // You're search-code here...
    // I'd recommend that you checkout quicksilver for
    // scoring your results and getting the highst-matching
    // node. You can find the code here:
    // http://ejohn.org/blog/jquery-livesearch/
    // which you'll need to adapt to your situation
}


/*
 * When the document loads, build your cache and bind a keyup event
 * to you search-box.
 */
$(document).ready(function () {
    generate_cache();
    $('#search-box').keyup(function() {
        var node = search($('search-box').val());

        // I assume you'll wan to do something with the node
        // once you've found it so I just made up a function
        // for highlighting the entire node.
        highlight_node(node);
    });
});
    
risposta data 15.02.2013 - 07:23
fonte

Leggi altre domande sui tag