Как я могу размыть/сфокусировать div, где contentEditable=true? Я пробовал $(elm).blur()
и $(elm).attr('contentEditable', false);
Как я могу размыть div, где contentEditable=true?
Ответы (4)
$("div[contentEditable]").blur()
, чтобы размыть все элементы contentEditable.
$("#elementId").blur()
, чтобы размыть элемент по его id
.
div[contentEditable]
проверяет наличие атрибута contentEditable, div[contentEditable="true"]
проверяет, установлено ли для этого атрибута значение true. Либо будет работать в большинстве случаев. Вы должны быть явными только в том случае, если вы явно установили для contentEditable какое-то другое значение, чтобы отключить его.
- person Paul Alexander; 02.02.2011
div[contentEditable!="false"]
, вероятно, будет вашим лучшим выбором для простоты.
- person zzzzBov; 02.02.2011
Я бы добавил еще одно решение, основанное на правильном ответе Omnicon. Я разветвил его скрипку и обновил ее.
Хитрость заключается в том, чтобы удалить все диапазоны после вызова размытия:
$(".editable").blur();
window.getSelection().removeAllRanges();
window.getSelection().removeAllRanges();
делает свое дело - без него редактируемый div все еще активен, а следующий e.codeKey == 13
возвращается при добавлении новой строки.
- person Szymon Stepniak; 10.03.2016
Предложенное Романом Решем решение не работает, когда вы щелкаете элемент и сразу после этого нажимаете Enter. Он не будет размывать, а создавать разрывы строк/деления.
Можно полностью предотвратить это поведение.
$('<div class="temp-contenteditable-el" contenteditable="true"></div>')
.appendTo('body').focus().remove();
Добавление ко всем ответам при использовании чего-то вроде
$(".editable").blur()
подумайте о размытии только сфокусированного, например
$(".editable:focus").blur()
Если нет, вы можете иногда попасть в хорошие проблемы