2010-10-04 11 views
4

Mon code JS:Comportement étrange de la sélection


    function getSelectedText(){ 
     if(window.getSelection){ 
      select = window.getSelection().getRangeAt(0); 
        var st_span = select.startContainer.parentNode.getAttribute("id").split("_")[1]; 
        var end_span = select.endContainer.parentNode.getAttribute("id").split("_")[1]; 
        console.log(select.endContainer); 
        var ret_urn=[st_span,end_span]; 
        return ret_urn 
     } 
     else if(document.getSelection){ 
      return document.getSelection(); 
     } 

    } 
    $(document).ready(function() { 
     $("div#check_button button").click(function() { 
         var loc = getSelectedText(); 
         console.log(loc); 
         }); 
    }); 
    

Voici tout mon fichier html: http://pastebin.com/acdiU623

Il est difficile de l'expliquer, donc je préparé court-métrage: http://www.youtube.com/watch?v=tVk4K70JO80

Dans un quelques mots: lorsque j'appuie sur le bouton gauche de la souris et que je le garde enfoncé pour sélectionner du texte/des chiffres et commencer la sélection à partir de la moitié de la lettre/du numéro, cette lettre/numéro n'est pas surlignée. Je dois commencer la sélection avec précision. Il est correct avec des lettres larges, mais dur avec des lettres comme i, j ou l.

Ceci est un deuxième exemple de mon film. J'ai appuyé sur le bouton gauche sur 3/4 de la longueur du numéro 5, bien que 5 ne soit pas en surbrillance, il est sélectionné.

Testé sur FF et Opera.

+1

Question intéressante, je ne peux pas * aider * avec, mais +1 pour m'intéresser. =) –

+0

aha c'est la moyenne. mais même ici. – Pavan

Répondre

1

Ok juste essayé cette démo. et cela fonctionne parfaitement. ça marche même sur Firefox. Il suffit de tester l'opéra et le safari et cela fonctionne aussi bien pour les deux. Même si je sélectionne la moitié d'une lettre ou d'un chiffre, cela renvoie simplement le texte surligné qui correspond à ce qui est attendu lorsque vous effectuez une sélection. Essayez-le sur une nouvelle page Web, mais seulement à des fins de test. Ensuite, lorsque cela fonctionne et que vous êtes satisfait des résultats, commencez à apporter des modifications à votre page existante.

C'est beaucoup plus simple que votre code. Ceci est un script inter-navigateur pour obtenir le texte sélectionné par l'utilisateur

<script language=javascript> 
function getSelText() 
{ 
    var txt = ''; 
    if (window.getSelection) 
    { 
     txt = window.getSelection(); 
      } 
    else if (document.getSelection) 
    { 
     txt = document.getSelection(); 
      } 
    else if (document.selection) 
    { 
     txt = document.selection.createRange().text; 
      } 
    else return; 
document.aform.selectedtext.value = txt; 
} 
</script> 
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name=aform > 
<textarea name="selectedtext" rows="5" cols="20"></textarea> 
</form> 

http://www.codetoad.com/javascript_get_selected_text.asp

Hope this helps.

PK

+1

'window.getSelection()' et 'document.getSelection()' retournent tous deux un objet 'Selection', pas une chaîne. Assurez-vous d'appeler 'toString()' sur cet objet, explicitement ('txt = window.getSelection(). ToString()') ou implicitement ('txt =" "+ window.getSelection()'). –

+0

c'est vrai. vous devez appeler toString() pour obtenir le texte. donc vous pouvez faire ce que dit Tim. merci beaucoup pour ce complément. – Pavan

+0

Thx pour l'idée! Mais je dois obtenir la valeur de l'attribut id de span qui est sur le début et la fin de la sélection.J'utilise span parce que j'ai besoin de styles.J'ai ajouté console.log (txt.anchorNode.parentNode.getAttribute ("id")) à votre js, insted de document.aform. [...] .Problème existe toujours.Movie: http://www.youtube.com/watch?v=CLbKmscGZ2I&videoformat=480p. Je pense que Tim Down a trouvé la raison. Mais connaissez-vous la solution ... :)? – domi

0

Il y a des points limites multiples différents pour une sélection qui aura le même à l'utilisateur. Qu'est-ce que vous voyez est probablement la différence entre ce qui suit, où | est une limite de sélection:

<span>5</span><span>|6</span><span>7|</span><span>8</span> 

et

<span>5|</span><span>6</span><span>7</span><span>|8</span> 

Dans les deux cas, l'appel toString() sur la sélection vous donnera le même résultat ("67").

+0

Il semble que ce soit la raison de ce comportement. Savez-vous comment gérer cela? – domi

+0

Qu'essayez-vous réellement d'accomplir? –

+0

Chaque personnage est à l'intérieur d'une travée séparée. Chaque intervalle a un identifiant différent. Je voudrais extraire cet identifiant de la plage qui est au début et à la fin de la sélection. J'ai besoin d'identifiants différents car je dois identifier chaque intervalle. – domi