J'aimerais que les utilisateurs cliquent sur un lien, puis il sélectionne le texte HTML dans un autre élément ( pas une entrée).
Par «sélectionner», j'entends la même manière que vous sélectionneriez du texte en faisant glisser votre souris dessus. Cela a été un ours pour la recherche car tout le monde parle de «sélectionner» ou de «mettre en évidence» en d'autres termes.
Est-ce possible? Mon code jusqu'à présent:
HTML:
<a href="javascript:" onclick="SelectText('xhtml-code')">Select Code</a>
<code id="xhtml-code">Some Code here </code>
JS:
function SelectText(element) {
$("#" + element).select();
}
Suis-je en train de manquer quelque chose d’évident?
javascript
jquery
Jason
la source
la source
Réponses:
Javascript simple
Voici une démo fonctionnelle . Pour ceux d'entre vous qui recherchent un plugin jQuery, j'en ai fait un aussi .
jQuery (réponse originale)
J'ai trouvé une solution pour cela dans ce fil . J'ai pu modifier les informations fournies et les mélanger avec un peu de jQuery pour créer une fonction totalement géniale pour sélectionner le texte dans n'importe quel élément, quel que soit le navigateur:
la source
browser
renifleur.Voici une version sans reniflement de navigateur et sans recours à jQuery:
la source
div contentEditable='true'
?Le code de Jason ne peut pas être utilisé pour des éléments à l'intérieur d'un iframe (car la portée diffère de la fenêtre et du document). J'ai corrigé ce problème et je l'ai modifié afin d'être utilisé comme n'importe quel autre plugin jQuery (chaînable):
Exemple 1: Sélection de tout le texte à l'intérieur des balises <code> en un seul clic et ajoutez la classe "selected":
Exemple 2: Lors d'un clic sur le bouton, sélectionnez un élément dans un iframe:
Remarque: n'oubliez pas que la source iframe doit résider dans le même domaine pour éviter les erreurs de sécurité.
Plugin jQuery:
Je l'ai testé dans IE8, Firefox, Opera, Safari, Chrome (versions actuelles). Je ne sais pas si cela fonctionne dans les anciennes versions d'IE (sincèrement, je m'en fiche).
la source
Ce fil contient des trucs vraiment merveilleux. Mais je ne suis pas en mesure de le faire directement sur cette page en utilisant FF 3.5b99 + FireBug en raison d'une "erreur de sécurité".
Yipee !! J'ai pu sélectionner toute la barre latérale droite avec ce code, j'espère qu'il vous aidera:
PS: - Je n'ai pas pu utiliser les objets retournés par les sélecteurs jquery comme
la source
Vous pouvez utiliser la fonction suivante pour sélectionner le contenu de n'importe quel élément:
Cette fonction peut être appelée comme suit:
la source
Je cherchais la même chose, ma solution était la suivante:
la source
focus()
sur une non-entrée, c'est de quoi traite cette question.J'ai aimé la réponse de Lepe sauf pour quelques choses:
Voici ce que j'ai trouvé, avec un clin d'œil à la réponse de Lepe pour l'inspiration. Je suis sûr que je serai ridiculisé car c'est peut-être un peu lourd (et pourrait en fait être plus, mais je m'égare). Mais cela fonctionne et évite de flairer le navigateur et c'est le point .
C'est ça. Une partie de ce que vous voyez est la lisibilité et / ou la commodité. Testé sur Mac dans les dernières versions d'Opera, Safari, Chrome, Firefox et IE. Également testé dans IE8. De plus, je ne déclare généralement les variables que si / quand cela est nécessaire dans les blocs de code, mais jslint a suggéré qu'elles soient toutes déclarées en haut. Ok jslint.
Modifier J'ai oublié d'inclure comment lier cela au code de l'op:
À votre santé
la source
setBaseAndExtent()
simplement parce qu'il existe me semble inutile lorsque vous pouvez simplement supprimer cette branche et que tout fonctionne aussi bien et de manière normalisée. La détection des fonctionnalités est agréable mais je serais fatigué de tester tout cela assez rapidement.setBaseAndExtent
est que c'est beaucoup plus efficace, et même avec leif
statut ajouté, c'est encore beaucoup plus que si vous "supprimez cette branche". Je ne comprends pas vraiment le commentaire de "je serais fatigué .."? Écrivez-le et oubliez-le, la seule chose que vous avez à faire est d'appeler la fonction, pas de l'écrire. :)setBaseAndExtent
c'était beaucoup plus performant queaddRange
. Pourquoi serait-ce? Mon autre commentaire était lié à votre philosophie de test de fonctionnalités étendue à toutes les interactions DOM: c'est énormément de code pour tester chaque méthode et propriété DOM avant de l'utiliser. Je ne désapprouve pas; Je suis juste heureux de tracer la ligne et de faire quelques hypothèses de plus dans mon code.Une version mise à jour qui fonctionne en chrome:
http://jsfiddle.net/KcX6A/326/
la source
Pour n'importe quelle balise, on peut sélectionner tout le texte à l'intérieur de cette balise par ce code court et simple. Il mettra en évidence toute la zone de balise avec une couleur jaune et sélectionnera le texte à l'intérieur en un seul clic.
la source
lepe - Cela fonctionne très bien pour moi merci! J'ai mis votre code dans un fichier de plugin, puis je l'ai utilisé en conjonction avec chaque déclaration afin que vous puissiez avoir plusieurs pré balises et plusieurs liens "Sélectionner tout" sur une seule page et il choisit le bon pré pour mettre en évidence:
la source
Jetez un oeil à l' objet Selection (moteur Gecko) et à l' objet TextRange (moteur Trident.) Je ne connais aucun framework JavaScript prenant en charge plusieurs navigateurs pour cela, mais je ne l'ai jamais cherché non plus, donc il est possible que même jQuery l'ait.
la source
La méthode de Tim fonctionne parfaitement pour mon cas - en sélectionnant le texte dans un div pour IE et FF après avoir remplacé la déclaration suivante:
avec ce qui suit:
Le texte dans le div est sélectionné en cliquant dessus avec la fonction jQuery suivante:
la source
voici une autre solution simple pour obtenir le texte sélectionné sous forme de chaîne, vous pouvez facilement utiliser cette chaîne pour ajouter un enfant élément div dans votre code:
la source
Mon cas d'utilisation particulier consistait à sélectionner une plage de texte à l'intérieur d'un élément span modifiable, qui, à ma connaissance, n'est décrit dans aucune des réponses ici.
La principale différence est que vous devez passer un nœud de type
Text
à l'Range
objet, comme décrit dans la documentation de Range.setStart () :Le
Text
nœud est le premier nœud enfant d'un élément span, donc pour l'obtenir, l'accès àchildNodes[0]
l'élément span. Le reste est le même que dans la plupart des autres réponses.Voici un exemple de code:
Autre documentation pertinente:
Range
Selection
Document.createRange ()
Window.getSelection ()
la source
Ajouté
jQuery.browser.webkit
au "else if" pour Chrome. Impossible de faire fonctionner cela dans Chrome 23.Faites ce script ci-dessous pour sélectionner le contenu dans une
<pre>
balise qui a leclass="code"
.la source
Selon la documentation jQuery de
select()
:Il y a votre explication pourquoi jQuery
select()
ne fonctionnera pas dans ce cas.la source