JQuery: есть ли способ выделить текст Div, когда вы нажимаете на него?
С JQuery есть способ выделить/выбрать (например, если кто-то должен был выбрать его с помощью мыши) текст внутри div, на который я нажимаю? а не текстовое поле, просто нормальный div.
Я пытаюсь создать "короткий URL-адрес", где, когда кто-то нажимает на текстовое поле, он выделяет весь текст, но он также НЕ должен позволять людям изменять текст в текстовом поле, но когда текстовое поле отключен, вы не можете выбрать какой-либо текст, поэтому я пытаюсь это сделать, я просто подумал, что div будет проще всего.
Извините, ребята, я не очень хорошо объяснял, что я имел в виду, добавив выше информацию, чтобы уточнить.
Ответы
Ответ 1
Правильно, речь идет не о цветовых фонах, а о выборе текста.
Сначала установите вход для чтения, остановив людей, изменяющих значение:
<input type="text" readonly="readonly" value="ABC" />
Затем с помощью jQuery (или аналогичного) выберите текст после его нажатия:
$('input').click(function() {
$(this).select();
});
Вы должны стилизовать этот ввод, как вам кажется, возможно, чтобы он выглядел как обычный бит текста, взглянуть на этот jsFiddle для дальнейшей демонстрации.
Ответ 2
Вы можете изменить CSS элемента после его нажатия. Что-то вроде (непроверено):
$(".el").click( function() {
$(".el").css( "color", "red" ).css( "background-color", "yellow" );
});
Ответ 3
$("div.myDiv").click(function() {
$(this).css("background-color", "yellow");
})
Или вы можете добавить класс:
$("div.myDiv").click(function() {
if($(this).hasClass("highlited")) {
$(this).removeClass("highlited");
} else {
$(this).addClass("highlited");
}
}
Ответ 4
См. мой ответ здесь (который, в свою очередь, ссылается на другой ответ).
Ответ 5
Вот быстрый и грязный фрагмент кода jQuery-less, который я собрал некоторое время назад:
/*
* 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;
}
}
}
Он мог бы использовать много улучшений (я особо ненавижу чрезмерное количество попыток... catch блоков), но это хорошая отправная точка. С "node" я имею в виду элемент из дерева DOM.
Ответ 6
Вы можете использовать текстовое поле и вместо его отключения использовать атрибут 'readonly'
<textarea name="selectable" readonly="readonly" />
Ответ 7
Working demo
Если вы говорите только о нажатии и не выборе внутри любого div. Это будет примерно так:
$("div").click(function()
{
$(this).css({"background":"yellow"});
});
Ответ 8
почему бы просто не использовать css:
div.<someclass>:focus {
background:yellow;
}
Ответ 9
Выбор определяется объектом диапазона в DOM - поэтому вам нужно работать с ними (document.createRange или document.createTextRange). См. Этот поток SO: Выбор текста в элементе (сродни подсветке мышью)