2016-02-02 1 views
1

Nous avons commencé à tester notre application dans IE11 et avons remarqué que window.getSelection() n'obtient pas une sélection dans IE11. Je ne vois pas où cette propriété n'est pas prise en charge dans IE11, et selon ma compréhension, window.getSelection devrait fonctionner dans toutes les versions d'IE à partir de 9.window.getSelection ne fonctionne pas ne fonctionne pas dans IE11

Est-ce que quelqu'un d'autre a rencontré ce problème? Est-ce que j'ai râté quelque chose ?

J'ai créé l'exemple ci-dessous qui fonctionnerait comme prévu dans une ancienne version d'IE et aussi dans Chrome mais pas dans IE11.

$('#selectButton').on('click', function() { 
 
    $('#name').select(); 
 
    var sel = window.getSelection(); 
 
    alert("Slected value in text area : " + sel); 
 

 
    } 
 

 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name='selectAll' id='selectAll'> 
 
    <textarea id='name' name='name'>Sample Value</textarea> 
 
    <br> 
 
    <input type='button' value='Click Me' id='selectButton' /> 
 
</form>

MISE À JOUR - Le complément d'enquête, je l'ai compris le window.getSelection() existe dans IE 11, mais il ne fonctionne pas lorsque le texte sélectionné se trouve dans un champ d'entrée comme zone de texte. Je sais aussi qu'il y avait un bug similaire dans FF. À ce stade, je ne suis pas sûr que ce soit un bug dans IE ou un comportement attendu.

+1

double possible de [ getSelection() ne fonctionne pas dans IE] (http://stackoverflow.com/questions/5421892/getselection-not-working-in-ie) – jmargolisvt

Répondre

0

Je crois que la réponse est sur la page à https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection

Dans la section Compatibilité du navigateur sur cette page, seule la version 9 d'Internet Explorer est répertorié. Basé sur d'autres pages sur le site Mozilla, il aurait "Oui" répertorié sous la compatibilité du navigateur Internet Explorer s'il était pris en charge dans toutes les versions de IE.

+0

Merci pour la réponse. window.getSelection() fonctionnait dans IE 10, je me demande pourquoi ils ont arrêté de le supporter dans 11. Aussi quelle est la meilleure alternative pour window.getSelection() dans IE 11? –

+2

"9" devrait signifier qu'il est supporté ** depuis ** version 9 (inclus). – Oriol

0

Vous n'obtenez pas le texte dans la sélection, car vous n'avez rien sélectionné.

Les éléments interactifs tels que textarea ont leur propre modèle de sélection et la méthode getSelection ne peut pas être utilisée pour obtenir une sélection de ces éléments. Cela représente Firefox aussi.

Pour résoudre ce problème dans IE et FF, utilisez HTMLInputElement API:

$('#selectButton').on('click', function() { 
 
    var area = $('#name')[0], 
 
     sel; 
 
    area.select(); 
 
    sel = area.value.substring(
 
    \t area.selectionStart, 
 
     area.selectionEnd 
 
    ); 
 
    alert("Selected value in text area : " + sel); 
 
    } 
 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name='selectAll' id='selectAll'> 
 
    <textarea id='name' name='name'>Sample Value</textarea> 
 
    <br> 
 
    <input type='button' value='Click Me' id='selectButton' /> 
 
</form>

De plus, en FF également des éléments modifiables contenu peut partiellement utiliser l'API HTMLInputElement, mais sans s'y limiter seulement.

+0

window.getSelection() devrait fonctionner dans toutes les versions d'Internet Explorer à partir de IE 9. Cela fonctionne également dans le nouveau navigateur MS Edge. La sélection ne se produit pas dans IE11, car il s'agit d'un bug dans IE11. Je l'ai confirmé avec le soutien MS. BTW, j'aime votre réponse et pourrait aller pour une mise en œuvre similaire. –

+0

@paulb Le modèle de sélection semble avoir été vécu beaucoup récemment. Il n'y a pas si longtemps, l'API HTMLInputElement incluait une mention sur l'utilisation du même modèle avec des zones modifiables de textarea et de contenu. – Teemu

0

Cela semble avoir été un problème avec IE 11. Comme par MS cela est fixé dans leur nouveau navigateur de Microsoft Edge ', mais ne sera pas résolu dans IE 11.

MS Bug Link