9
votes

Comment pouvez-vous identifier un mot ou une sélection dans l'ensemble du document?

J'essaie de mettre en évidence une partie du texte sur mon site Web. Ce texte en surbrillance sera enregistré pour l'utilisateur spécifique dans une base de données et lorsque le document est ouvert à nouveau, il affichera le texte précédemment mis en surbrillance. J'ai supposé que j'utilisais JavaScript pour mettre en surbrillance le texte, mais je ne peux pas sembler trouver un moyen de localiser l'endroit où le mot est que je souligne. XXX

J'utilise cela pour obtenir la sélection mais Je ne peux pas comprendre où la sélection est dans le texte. La plus grande gêne est lorsque j'ai des doublons dans la ligne ou du texte, donc si je devais utiliser la recherche, je trouverais la première instance et non celle que je cherchais.

La question est la suivante: comment la question est la suivante: Vous identifiez un mot ou une sélection dans tout le document?


0 commentaires

3 Réponses :


1
votes

Createrange crée un objet Textrange. Il a toutes sortes d'informations utiles: xxx


1 commentaires

Cela ne fonctionnera pas vraiment car je n'ai pas de textarea à parler, j'ai simplement un document lu sur la base de données et affichée.



3
votes

Ceci n'est certainement pas une tâche triviale, car vous êtes confronté aux deux principaux problèmes de localisation du texte dans le document actuel, puis de la retrouver à nouveau sur une charge ultérieure. Le problème est encore compliqué si le contenu de votre page est sujet à modifier, car vous ne pouvez même pas compter sur la position relative du texte pour rester identique.

Vous voudrez peut-être déterminer si c'est le meilleur approche de tout ce que vous essayez d'accomplir compte tenu de l'effort requis, mais voici quelque chose qui pourrait vous aider à démarrer dans la bonne direction: p> xxx pré>

ainsi qu'une méthode pour sélectionner le Texte à nouveau: P>

function setSelection(position) {
    if (!position || !position.node) {
        return;
    }

    var selection, range, element;

    if (document.createRange) {
        element = position.node.childNodes[0];
        range = document.createRange();
        range.setStart(element, position.offset);
        range.setEnd(element, position.offset + position.length);
        selection = window.getSelection();
        selection.removeAllRanges();
        selection.addRange(range);
    } else if (document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(position.node);
        range.collapse(true);
        range.move('character', position.offset);
        range.moveEnd('character', position.length);
        range.select();
    }
}


3 commentaires

C'est une approche similaire (mais moins réalisée) du module Serializer de ma bibliothèque Rangy: code.google.com/p/Rangy/wiki/serializermodule


@Timdown oh wow, je suis un peu honte que je n'ai pas pensé à Rangy lors de la rédaction de la réponse donnée mes expériences passées positives avec elle. Merci pour le lien.


@ Timstone Si j'essaie de sélectionner des lettres de 'World', comme seulement "ORL". Mais je commence par la suite à gauche à gauche, puis la position offset me donne 3, mais cela aurait dû me donner 1, la cause o vient en premier, pas L .. Alors, comment puis-je m'attacher à la sélection de lettres / mots?



4
votes

Vous pouvez utiliser mon Bibliothèque Rangy et son Sélection module de sérialisation pour cela. Le noyau de Rangy fournit une API de sélection et de plage de sélections cohérentes pour tous les navigateurs et le module Serializer en s'appuie sur celui-ci en convertissant chaque limite de sélection en un chemin via le document. Voir la documentation liée pour plus de détails.


0 commentaires