2010-10-25 5 views
15

Avec Jquery existe-t-il un moyen de surligner/sélectionner (comme si quelqu'un devait le sélectionner avec la souris) le texte à l'intérieur d'un div sur lequel je clique? pas un textbox, juste un div normal. J'essaye de faire une boîte d'URL courte, où quand quelqu'un clique sur la zone de texte, elle met en évidence tout le texte, mais elle doit également NE PAS permettre aux gens de changer le texte dans la zone de texte, mais quand un La zone de texte est désactivée, vous ne pouvez pas sélectionner de texte, donc j'essaye de le faire, je pensais juste qu'un div serait plus facile.Jquery: existe-t-il un moyen de mettre en évidence le texte d'une Div lorsque vous cliquez dessus?

désolé les gars je n'ai pas fait un excellent travail d'expliquer ce que je voulais dire au début, a ajouté des informations ci-dessus pour clarifier.

+0

n'a rien trouvé sur ma recherche habituelle, pourriez-vous le style pas une zone de saisie pour ressembler à votre div? –

+0

Pouvez-vous expliquer pourquoi vous voulez faire cela?Voulez-vous simplement que la couleur d'arrière-plan change ou sélectionnez le texte pour permettre la copie. –

+0

Eh bien, j'essaie de créer une boîte d'URL courte, où quand quelqu'un clique sur la zone de texte, il met en évidence tout le texte, mais il ne doit PAS permettre aux gens de changer le texte dans la zone de texte, mais quand une zone de texte est désactivé, vous ne pouvez pas sélectionner de texte, donc j'essaye de le faire, je pensais juste qu'un div serait le plus facile. –

Répondre

15

À droite, il ne s'agit pas de couleurs de fond, mais de la sélection du texte.

d'abord définir une entrée en lecture seule, empêcher les gens de changer la valeur:

<input type="text" readonly="readonly" value="ABC" /> 

Ensuite, en utilisant jQuery (ou similaire) pour sélectionner le texte une fois qu'il a été cliqué:

$('input').click(function() { 
    $(this).select(); 
}); 

Vous devriez le style cette entrée comme vous le souhaitez, peut-être pour faire ressembler un morceau de texte normal, take a look at this jsFiddle pour une démonstration supplémentaire.

2

Vous pouvez modifier le CSS de l'élément après avoir cliqué dessus. Quelque chose comme (non testé):

$(".el").click(function() { 

    $(".el").css("color", "red").css("background-color", "yellow"); 

}); 
+3

Bien que l'auteur dise "highlight", je soupçonne qu'il veut sélectionner le texte pour permettre à quelqu'un de copier une section entière de texte dans le presse-papiers. –

+0

Bon point, Dans ce cas, la réponse de Mark B ci-dessous est plus la chose –

2
$("div.myDiv").click(function() { 
    $(this).css("background-color", "yellow"); 
}) 

Ou vous pouvez ajouter une classe:

$("div.myDiv").click(function() { 
    if($(this).hasClass("highlited")) { 
     $(this).removeClass("highlited"); 
    } else { 
     $(this).addClass("highlited"); 
    } 
} 
0

Working demo

Si vous ne parlez que de cliquer et ne pas sélectionner dans une div. Ce serait quelque chose comme ceci:

$("div").click(function() 
      { 
       $(this).css({"background":"yellow"}); 
      }); 
0

pourquoi ne pas utiliser css:

div.<someclass>:focus { 
    background:yellow; 
} 
1

Voici un extrait de code jQuery moins rapide et sale, je mis ensemble il y a quelque temps:

/* 
* Creates a selection around the node 
*/ 
function selectNode(myNode){ 
    // Create a range 
    try{ // FF 
     var myRange = document.createRange(); 
    }catch(e){ 
     try{ // IE 
      var myRange = document.body.createTextRange(); 
     }catch(e){ 
      return; 
     } 
    } 

    // Asign text to range 
    try{ // FF 
     myRange.selectNode(myNode); 
    }catch(e){ 
     try{ // IE 
      myRange.moveToElementText(myNode); 
     }catch(e){ 
      return; 
     } 
    } 

    // Select the range 
    try{ // FF 
     var mySelection = window.getSelection(); 
     mySelection.removeAllRanges(); // Undo current selection 
     mySelection.addRange(myRange); 
    }catch(e){ 
     try{ // IE 
      myRange.select(); 
     }catch(e){ 
      return; 
     } 
    } 
} 

Il pourrait utiliser beaucoup d'amélioration (je déteste surtout la surabondance de essayer ... attraper des blocs) mais c'est un bon point de départ. Avec "noeud" je veux dire un élément de l'arbre DOM.

2

Vous pouvez utiliser un textarea et au lieu de le désactiver, utilisez le « readonly » attribut

<textarea name="selectable" readonly="readonly" /> 
Questions connexes