window.getSelection () дает мне выделенный текст, но я хочу HTML

Попробуйте использовать sendmail вместо драйвера smtp (в соответствии с этими рекомендациями: http://code.tutsplus.com/tutorials/sending-emails-with -laravel-4-gmail - net-36105 )

MAIL_DRIVER=sendmail
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your@gmail.com
MAIL_PASSWORD=apppassword
MAIL_ENCRYPTION=tls

30
задан Zach Saucier 17 October 2016 в 13:41
поделиться

2 ответа

Ответ Тима Вниз на правильном пути. Однако одна проблема заключается в том, что ExtractContentents () удалит выделение от DOM. Вы можете использовать

window.getSelection().getRangeAt(0).cloneContents(); 

, чтобы просто получить копию того, что выбрано. Затем вы можете обернуть это с вашим новым тегом, а затем заменить его выделение. Зазабоченность тому, что касается диапазона, охватывающей несколько элементов HTML, безусловно, является действительным. Я думаю, что после того, как вы получите диапазон, он «исправляет HTML, но когда вы вернете его в него, могут вызвать проблемы. здесь хороший ресурс на объекте диапазона.

13
ответ дан 27 November 2019 в 23:48
поделиться

Взгляните на спецификацию диапазона DOM . Вы можете получить диапазон от выбора пользователя в Firefox, используя:

var range = window.getSelection().getRangeAt(0);

Обратите внимание, что некоторые браузеры, включая Firefox, позволяют использовать несколько выборов, которые могут быть доступны через методом Getrangeat () . отбора.

Диапазон выражается в терминах узлов и смещений DOM внутри этих узлов. После того, как вы получили ваш диапазон , это не просто сделать именно то, что вы хотите, поскольку границы диапазона могут быть в разных узлах на разных уровнях дерева DOM, поэтому просто окружающие контент диапазона с тегом не всегда возможно. Вы можете сделать что-то вроде следующего, хотя он создаст новый элемент блока для содержения выбранного контента:

var range = window.getSelection().getRangeAt(0);
var selectionContents = range.extractContents();
var div = document.createElement("div");
div.style.color = "yellow";
div.appendChild(selectionContents);
range.insertNode(div);

Другой, Hacky, альтернативы - использовать метод Execommand () ] Документ для изменения выбора (например, установив его к определенному цвету), а затем используя Document.QuerySelectorall или некоторые селекторные библиотеки для выбора элементов с этим цветом, а затем примените к ним.

40
ответ дан 27 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: