2009-05-27 16 views
1

Je voudrais faire ce qui suit dans une page ASP.NET, pour Internet Explorer et Firefox:Annoter dynamiquement du HTML?

  1. Afficher un document HTML téléchargé dans une fenêtre.
  2. Autoriser l'utilisateur à mettre en surbrillance une section arbitraire avec le curseur de texte standard, et appuyez sur un bouton "laisser un commentaire ici".
  3. Enregistrez les points de début et de fin exacts de la surbrillance, et pas seulement le contenu de surbrillance, et associez-les à un ID unique. Mettez en surbrillance tout ce qui se trouve entre les points de début et de fin en superposant une balise < span class = "highlight" >.

1 et 2 ne posent aucun problème. Mais pour 3 et 4 ... est-ce possible? Si oui, comment puis-je m'y prendre?

Si cela ne peut pas être fait pour un document HTML, qu'en est-il du texte brut? (Pour le HTML, nous pouvons supposer que c'est relativement simple, par exemple, j'imagine que ce document de support de document est enregistré en HTML.)

+0

Sons ambitieux. Envelopper les points de début/fin autour du nœud approprié imbriquant dans le document parent sera un cauchemar, en particulier avec le codage HTML notoirement redondant mis en place. EEK! –

+0

Avez-vous simplement appelé "Documents Word enregistrés au format HTML" simple? –

+0

Hé, d'accord, je le reprends. Mais je pensais simple dans le sens où ce sont des documents vers des sites Web professionnels à part entière. –

Répondre

6

Eh bien, vous avez un problème.

Supposons que ce texte:

Hello my 
name is 
Josh and 
this is an 
example for you 

Ce qui était au-dessous comme ceci:

<span> 
    Hello my 
    <span> 
    name is<br/> 
    Josh and 
    </span> 
    <span> 
    this is an<br/> 
    example for you 
    </span> 
</span> 

Supposons ensuite que je sélectionne:

Josh and 
this is an 

Le code HTML que j'ai choisi est:

Josh and 
</span> 
<span> 
    this is an 

Donc, si vous entourez un span autour de cela, vous allez vous retrouver avec du HTML foiré.

Donc, je recommande ce qui suit:

  • Obtenez le texte sélectionné avec le javascript
  • Strip les balises HTML du texte sélectionné

Vous vous retrouvez avec ceci:

function getSelectedTextNoHtml() { 
    return getSelectedText().replace(/(<([^>]+)>)/ig, ""); 
} 

function getSelectedText() { 
    if (window.getSelection) 
     return window.getSelection(); 
    else if (document.getSelection) 
     return document.getSelection(); 
    else if (document.selection) 
     return document.selection.createRange().text; 
    return ""; 
} 

Vous pouvez ensuite prendre le code HTML de l'ensemble du document, dépouiller les balises HTML et fi nd l'index du texte sélectionné dans la version texte du document.

Je peux même penser à des façons (laides mais réalisables) d'obtenir l'index de la sélection en HTML. Mais je vous préviens si vous les voulez ils sont laids.

Il ya même des façons très moche pour obtenir une envergure autour du texte sélectionné avec l'ID unique que vous voulez. Bien sûr, il y a toujours des façons de faire des choses. Tout est juste un algorithme. Mais cela impliquerait de bonnes journées de travail pour l'affiner!

J'ai posté assez, si vous voulez que j'élabore, il suffit de demander!

MISE À JOUR:

OK, vous l'avez demandé :)

  • Prenez le texte sélectionné et LOGGUE quelque part
  • Remplacer le texte sélectionné temporairement quelque chose
  • tout à fait unique
  • Trouver l'index de ce texte totalement unique
  • Modifier le texte

Si vous voulez le faire discrètement sans leur clignotement texte et changeant, vous pouvez essayer de tirer profit du HTML espace zéro largeur:

&#8203; 

bâton devant 100 fois et trouver la indice de 100 espaces de largeur nulle!

Bien sûr, il échouera si leur document comporte 100 places zéro largeur et leur texte sélectionné ailleurs, mais à ce point, je dis « laisser échouer » :)

Howzat?

+0

Merci pour la bonne explication. La solution de suppression des balises HTML et de recherche de l'index du texte sélectionné fonctionnerait correctement, sauf si l'utilisateur met en surbrillance le texte qui est dupliqué dans le document. Ainsi, au risque de se plonger dans la laideur ... existe-t-il un moyen d'obtenir un index de la sélection à partir de javascript? (Supposons que ce soit juste un document en texte clair ... bien que ce soit évidemment contenu dans une page HTML ...) –

+0

Pas de problème - J'ai mis à jour le post! – joshcomley

+0

Cela ne couvre toujours pas la recherche de l'index dans le document HTML, mais cela est également possible. Mais le lit m'appelle, alors je vais aller plus loin demain! – joshcomley

Questions connexes