Как выбрать весь текст в contenteditable div?
Прежде чем это будет помечено как дубликат, я хочу, чтобы вы поняли, что никто не дал хороший ответ на этот конкретный вопрос. В выберите весь текст в contenteditable div, когда он фокусируется/кликает, принятый ответ и ответ Tim Down не являются полезными, поскольку они работают только тогда, когда элемент уже сфокусирован. В моем случае я хочу, чтобы весь текст в contenteditable div был выбран после нажатия кнопки, даже если div не был сфокусирован заранее.
Как я могу это сделать?
Ответы
Ответ 1
Я использовал код этот поток, чтобы ответить на мой вопрос. Это 100% jQuery, как вы просили. Надеюсь, вам понравится:)
jQuery.fn.selectText = function(){
var doc = document;
var element = this[0];
console.log(this, element);
if (doc.body.createTextRange) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
};
$("button").click(function() {
$("#editable").selectText();
});
jsfiddle.
Ответ 2
Например, в следующем сценарии, если пользователь задает фокус в редактируемый div (с помощью мыши, клавиатуры или нажатием кнопки), выбирается содержимое редактируемого div.
<div id="editable" style=" border:solid 1px #D31444" contenteditable="true"
onfocus="document.execCommand('selectAll', false, null);">
12 some text...
</div>
<button onclick="document.getElementById('editable').focus();" >Click me</button>
Ответ 3
Большая функция.
Я адаптировал его, чтобы обеспечить полный выбор текста по любому количеству редактируемых разделов через класс, независимо от того, нажали ли они непосредственно или на вкладке:
$.fn.selectText = function(){
var doc = document;
var element = this[0];
//console.log(this, element);
if (doc.body.createTextRange) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
};
$(".editable").on("focus", function () {
$(this).selectText();
});
$(".editable").on("click", function () {
$(this).selectText();
});
$('.editable').mouseup(function(e){
e.stopPropagation();
e.preventDefault();
// maximize browser compatability
e.returnValue = false;
e.cancelBubble = true;
return false;
});
HTML:
<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">01 text...</div>
<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">02 text...</div>
<div class="editable" style="border:dotted 1px #ccc;" contenteditable="true">03 text...</div>
FIDDLE:
http://jsfiddle.net/tw9jwjbv/
Ответ 4
<div id="test" style=" border:solid 1px #D31444" contenteditable="true" onclick="document.execCommand('selectAll',false,null)">12 some text...</div>
Судя по этому ответу, указанному в ссылке, вы не можете использовать код нажатием кнопки.
То, что я говорю, даже говорит в div onfocus="document.execCommand('selectAll',false,null)"
Затем используйте jQuery для запуска фокуса $('#test').focus();