2010-10-25 8 views
15

Con Jquery c'è un modo per evidenziare/selezionare (come se qualcuno dovesse selezionarlo con il mouse) il testo all'interno di un div su cui clicco? non una casella di testo, solo un div normale.Jquery: c'è un modo per evidenziare il testo di una Div quando si fa clic su di esso?

Sto provando a creare una casella "URL breve", in cui quando qualcuno fa clic nell'area di testo, evidenzia tutto il testo, ma NON deve consentire alle persone di modificare il testo nella casella di testo, ma quando un textbox è disabilitato non puoi selezionare alcun testo, quindi sto provando a farlo, ho solo pensato che un div sarebbe stato più semplice.

scusate ragazzi non ho fatto un gran lavoro di spiegare cosa volevo dire all'inizio, ho aggiunto informazioni sopra per chiarire.

+0

non ho trovato nulla sulla mia ricerca al solito, potrebbe non lo stile una casella di input per assomigliare il tuo div? –

+0

Puoi spiegare perché vuoi farlo?Vuoi solo cambiare il colore di sfondo o selezionare il testo per consentire la copia. –

+0

beh, sto provando a creare una casella "URL breve", in cui quando qualcuno fa clic sulla textarea, evidenzia tutto il testo, ma NON deve consentire alle persone di cambiare il testo nella casella di testo, ma quando una casella di testo è disabilitato non è possibile selezionare alcun testo, quindi sto cercando di farlo, ho solo pensato che un div sarebbe più semplice. –

risposta

15

Giusto, non si tratta di colori di sfondo, si tratta di selezionare il testo.

Prima impostato un ingresso a sola lettura, impedire che le persone cambiando il valore:

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

Poi utilizzando jQuery (o simile) per selezionare il testo una volta che è stato cliccato:

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

Si dovrebbe stile questo input come meglio credi, forse per far sembrare un normale bit di testo, take a look at this jsFiddle per un'ulteriore dimostrazione.

2

È possibile modificare il CSS dell'elemento dopo che è stato fatto clic. Qualcosa di simile (non testata):

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

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

}); 
+3

Sebbene l'autore dica "evidenziazione", sospetto che voglia selezionare il testo per consentire a qualcuno di copiare un'intera sezione di testo negli Appunti. –

+0

Buon punto, In tal caso la risposta di Mark B sotto è più la cosa –

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

Oppure è possibile aggiungere una classe:

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

Working demo

Se si parla solo di clic e non selezionando all'interno di qualsiasi div. Sarebbe qualcosa di simile:

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

perché non basta usare i CSS:

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

Ecco un rapido e sporco codice jQuery-meno frammento ho messo insieme qualche tempo fa:

/* 
* 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; 
     } 
    } 
} 

Si potrebbe usare un sacco di miglioramento (I specialmente odio la sovrabbondanza di prova ... cattura i blocchi) ma è un buon punto di partenza. Con "nodo" intendo un oggetto dell'albero DOM.

2

È possibile utilizzare una textarea e anziché disabilitarlo, utilizzare la 'sola lettura' attributo

<textarea name="selectable" readonly="readonly" /> 
Problemi correlati